# ASCII rhombic grid

## SOGL V0.12, 20 bytes

ā.I∫e+H╚╬8}:±№╬8╬¡∙*


Try it Here! Takes the input in the reversed order of what they are in the examples - r, s, n, m.

Explanation:

ā                     push an empty array - canvas
.I∫      }           for each in range(input) (1-indexed)
H                 decrement
╚                create a diagonal of that size
╬8              insert into the canvas
:          create a duplicate of the canvas
±№        reverse it vertically and horizotally
╬8      insert that into the canvas
∙   multiply vertically by the next input
*  multiply horizontally by the next input


## Charcoal, 4839 37 bytes

ＵＯ⊕Ｉε\Ｆ⊖ＩζＣ¹¦¹‖ＭL≔⊗⁺ＩζＩεδＦ⊖ＮＣδ⁰Ｆ⊖ＮＣ⁰δ


Try it online! Link is to verbose version of code. Explanation:

ＵＯ⊕Ｉε\


Draw a square of size r + 1. This is a quarter of a nested diamond of size 1.

Ｆ⊖ＩζＣ¹¦¹


Copy the square 1 square right and down s - 1 times to get it to the right size.

‖ＭL


Reflect it to become a full nested diamond.

≔⊗⁺ＩζＩεδ


Compute the size of this nested diamond.

Ｆ⊖ＮＣδ⁰


Copy the diamond to the right m - 1 times.

Ｆ⊖ＮＣ⁰δ


Copy the diamond downwards n - 1 times.

## Python 2, 160159 158 bytes

-1 byte thanks to Jonathan Frech

m,n,s,r=input()
l=~-s*' '+'/'*(r-~r)+~-s*' '
for x in range(n*2):print'\n'.join(m*(l[i:i+s+r]+l.replace(*'/\\')[i:i+s+r][::-1])for i in range(r+s))[::1-x%2*2]


Try it online!

This uses the fact that the bottom of the rhombus is the top inverted ([::-1]), iterating over range(n*2) and using ~x%2*2-1 to control if it is the top or the bottom.
For the top (and the bottom) the right side is just the left side inverted and replacing / with \ -> l.replace(*'/\\')..[::-1]
To generate the pattern / nesting ~-s*' '+'/'*(1+r*2)+~-s*' ' is used to make a string like  ///  that will be iterated and chopped :

   '|  //|/  '
' | ///|  '
'  |/// | '
'  /|//  |'