Changeset 650 for codes/icosagcm/devel
- Timestamp:
- 12/22/17 01:35:23 (7 years ago)
- Location:
- codes/icosagcm/devel
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
codes/icosagcm/devel/Python/src/macros.jin
r615 r650 10 10 11 11 {% macro define(key,val) %} 12 {{ flat }}undef {{ key }} 12 {{ flat }}undef {{ key }} 13 13 {{ flat }}define {{ key }} {{ val }} 14 14 {%- endmacro %} … … 23 23 {{ flat }}define {{ key }} {{ key }}_UNDEFINED_HERE 24 24 {%- endmacro %} 25 26 {% macro cdef(code, key,val) %} 27 {{ define(key,val) if key in code }} 28 {%- endmacro %} 29 30 {% macro cundef(code, keys) %} 31 {% for key in keys %} 32 {{ undef(key) if key in code }} 33 {%- endfor %} 34 {%- endmacro %} 35 25 36 26 37 {% macro dummy() -%} -
codes/icosagcm/devel/Python/src/unstructured/macros.jin
r647 r650 86 86 {%- endmacro %} 87 87 88 {# ---------------------- PRELOAD STENCIL INDICES ---------------------- #} 89 90 {% macro get_edges(thecode, mesh,degree) %} 91 {% for iedge in range(1,degree+1) %} 92 {{ 'edge%d = %s_edge(%d,ij)'%(iedge,mesh,iedge) if 'EDGE' in thecode }} 93 {% endfor %} 94 {% for iedge in range(1,degree+1) %} 95 {{ 'le_de%d = le_de(edge%d)'%(iedge,iedge) if 'LE_DE' in thecode }} 96 {% endfor %} 97 {% for iedge in range(1,degree+1) %} 98 {{ 'sign%d = %s_ne(%d,ij)'%(iedge,mesh,iedge) if 'SIGN' in thecode }} 99 {% endfor %} 100 {% for iedge in range(1,degree+1) %} 101 {{ 'ij_up%d = up(edge%d)'%(iedge,iedge) if 'VERTEX1' in thecode }} 102 {% endfor %} 103 {% for iedge in range(1,degree+1) %} 104 {{ 'ij_down%d = down(edge%d)'%(iedge,iedge) if 'VERTEX2' in thecode }} 105 {% endfor %} 106 {% endmacro %} 107 108 {% macro get_vertices(thecode, mesh,degree) %} 109 {% for ivertex in range(1,degree+1) %} 110 {{ 'vertex%d = %s_vertex(%d,ij)'%(ivertex,mesh,ivertex) if 'VERTEX' in thecode }} 111 {% endfor %} 112 {% endmacro %} 113 88 114 {# ------------------------------ MESHES --------------------------- #} 89 90 {% macro get_edges(thecode, mesh,degree) %}91 {% for iedge in range(1,degree+1) %}92 {{ 'edge%d = %s_edge(%d,ij)'%(iedge,mesh,iedge) }}93 {% endfor %}94 {% for iedge in range(1,degree+1) %}95 {{ 'le_de%d = le_de(edge%d)'%(iedge,iedge) }}96 {% endfor %}97 {% for iedge in range(1,degree+1) %}98 {{ 'sign%d = %s_ne(%d,ij)'%(iedge,mesh,iedge) }}99 {% endfor %}100 {% for iedge in range(1,degree+1) %}101 {{ 'ij_up%d = up(edge%d)'%(iedge,iedge) if 'VERTEX1' in thecode }}102 {% endfor %}103 {% for iedge in range(1,degree+1) %}104 {{ 'ij_down%d = down(edge%d)'%(iedge,iedge) if 'VERTEX2' in thecode }}105 {% endfor %}106 {% endmacro %}107 115 108 116 {# argument 'code' is the body enclosed by ON_XXX ... END_BLOCK ; it takes arguments : mesh,degree=0 #} … … 148 156 SELECT CASE(dual_deg(ij)) 149 157 CASE(3) 158 {{ get_edges(thecode, mesh, 3) }} 159 {{ get_vertices(thecode,mesh,3) }} 150 160 {{ vloop(mesh, lrange, flags, code, 3) }} 151 161 CASE(4) 162 {{ get_edges(thecode, mesh, 4) }} 163 {{ get_vertices(thecode,mesh,4) }} 152 164 {{ vloop(mesh, lrange, flags, code, 4) }} 153 165 CASE DEFAULT … … 243 255 {% set thecode = caller(mesh) %} 244 256 {{ define('EDGE', 'l,edge') }} 245 {{ define('LE_DE', 'le_de(edge)') }}246 {{ define('SIGN', '1.') }}247 {{ define('CELL1', 'l,ij_left') }}248 {{ define('CELL2', 'l,ij_right') }}249 {{ define('VERTEX1', 'l,ij_down') }}250 {{ define('VERTEX2', 'l,ij_up') }}257 {{ cdef(thecode, 'LE_DE', 'le_de(edge)') }} 258 {{ cdef(thecode, 'SIGN', '1.') }} 259 {{ cdef(thecode, 'CELL1', 'l,ij_left') }} 260 {{ cdef(thecode, 'CELL2', 'l,ij_right') }} 261 {{ cdef(thecode, 'VERTEX1', 'l,ij_down') }} 262 {{ cdef(thecode, 'VERTEX2', 'l,ij_up') }} 251 263 !$OMP DO SCHEDULE(STATIC) 252 264 DO edge = 1, edge_num … … 258 270 END DO 259 271 !$OMP END DO 260 {{ undef('EDGE') }} 261 {{ undef('LE_DE') }} 262 {{ undef('SIGN') }} 263 {{ undef('CELL1') }} 264 {{ undef('CELL2') }} 265 {{ undef('VERTEX1') }} 266 {{ undef('VERTEX2') }} 272 {{ cundef(thecode, ('EDGE','LE_DE','SIGN','CELL1','CELL2','VERTEX1','VERTEX2') ) }} 267 273 {%- endmacro %} 268 274 … … 272 278 {% if degree>1 %} 273 279 {% for iedge in range(1,degree+1) %} 274 {{ define('EDGE', 'l,edge%d'%iedge) }}275 {{ define('SIGN', 'sign%d'%iedge) }}276 {{ define('LE_DE', 'le_de%d'%iedge) }}277 {{ define('VERTEX1', 'l,ij_up%d'%iedge) }}278 {{ define('VERTEX2', 'l,ij_down%d'%iedge) }}280 {{ cdef(thecode, 'EDGE', 'l,edge%d'%iedge) }} 281 {{ cdef(thecode, 'SIGN', 'sign%d'%iedge) }} 282 {{ cdef(thecode, 'LE_DE', 'le_de%d'%iedge) }} 283 {{ cdef(thecode, 'VERTEX1', 'l,ij_up%d'%iedge) }} 284 {{ cdef(thecode, 'VERTEX2', 'l,ij_down%d'%iedge) }} 279 285 {{ thecode }} 280 286 {% endfor %} 281 287 {% else %} 282 {{ define('EDGE', 'l,edge') }}283 {{ define('SIGN', mesh + '_ne(iedge,ij)') }}284 {{ define('LE_DE', 'le_de(edge)') }}285 {{ define('VERTEX1', 'l,ij_up') }}286 {{ define('VERTEX2', 'l,ij_down') }}288 {{ cdef(thecode, 'EDGE', 'l,edge') }} 289 {{ cdef(thecode, 'SIGN', mesh + '_ne(iedge,ij)') }} 290 {{ cdef(thecode, 'LE_DE', 'le_de(edge)') }} 291 {{ cdef(thecode, 'VERTEX1', 'l,ij_up') }} 292 {{ cdef(thecode, 'VERTEX2', 'l,ij_down') }} 287 293 DO iedge = 1, {{ mesh }}_deg(ij) 288 294 edge = {{ mesh }}_edge(iedge,ij) … … 292 298 END DO 293 299 {% endif %} 294 295 {{ undef('EDGE') }} 296 {{ undef('SIGN') }} 297 {{ undef('LE_DE') }} 298 {{ undef('VERTEX1') }} 299 {{ undef('VERTEX2') }} 300 {{ cundef(thecode, ('EDGE', 'SIGN', 'LE_DE', 'VERTEX1', 'VERTEX2') ) }} 300 301 {%- endmacro %} 301 302 … … 320 321 {% macro forall_vertices(mesh,degree) -%} 321 322 {% set thecode = caller() %} 322 {{ define('VERTEX', 'l,vertex') }}323 323 {% if degree>1 %} 324 324 {% for ivertex in range(1,degree+1) %} 325 ivertex = {{ ivertex}}326 vertex = {{ mesh }}_vertex({{ ivertex }},ij) 325 {{ define('RIV2', 'Riv2(%d,ij)'%ivertex ) }} 326 {{ define('VERTEX', 'l,vertex%d'%ivertex ) }} 327 327 {{ thecode }} 328 328 {% endfor %} 329 329 {% else %} 330 {{ define('RIV2', 'Riv2(ivertex,ij)') }} 331 {{ define('VERTEX', 'l,vertex') }} 330 332 DO ivertex = 1, {{ mesh }}_deg(ij) 331 333 vertex = {{ mesh }}_vertex(ivertex,ij) … … 334 336 {% endif %} 335 337 {{ undef('VERTEX') }} 338 {{ undef('RIV2') }} 336 339 {%- endmacro %} 337 340 … … 357 360 #define _FALSE_ (0==1) 358 361 359 #define RIV2 Riv2(ivertex,ij)360 362 #define AI Ai(ij) 361 363 #define AV Av(ij) -
codes/icosagcm/devel/src/unstructured/caldyn_unstructured.F90
r645 r650 8 8 CONTAINS 9 9 10 #define DBL REAL(C_DOUBLE) 11 10 12 #define INDICES1 ij,l,iq,iedge,edge,ivertex,vertex,ij_left,ij_right 11 13 #define INDICES2 ij_up,ij_down,itrisk,edge_trisk,kup,kdown 14 #define EDGES edge1,edge2,edge3,edge4,edge5,edge6 15 #define VERTICES vertex1,vertex2,vertex3,vertex4,vertex5,vertex6 16 #define SIGNS sign1,sign2,sign3,sign4,sign5,sign6 17 #define EDGE_ENDS ij_up1,ij_up2,ij_up3,ij_up4,ij_up5,ij_up6,ij_down1,ij_down2,ij_down3,ij_down4,ij_down5,ij_down6 18 #define LENGTHS le_de1,le_de2,le_de3,le_de4,le_de5,le_de6 12 19 #define DECLARE_INDICES INTEGER INDICES1,INDICES2 20 #define DECLARE_EDGES DBL SIGNS,LENGTHS ; INTEGER EDGES, EDGE_ENDS 21 #define DECLARE_VERTICES INTEGER VERTICES 13 22 #define PHI_BOT(ij) Phi_bot 14 23 #define PHI_BOT_VAR 0. … … 17 26 #define BINDC(thename) BINDC_(dynamico_ ## thename) 18 27 19 #define DBL REAL(C_DOUBLE)20 28 #define DOUBLE1(m) DBL, DIMENSION(m) 21 29 #define DOUBLE2(m,n) DBL, DIMENSION(m,n) … … 49 57 FIELD_UL :: DePhil, v_el, G_el, F_el ! LOCAL 50 58 DECLARE_INDICES 59 DECLARE_EDGES 51 60 DBL :: W_el, W2_el, gPhi2, dP, divG, u2, uu 52 61 #include "../kernels_unst/caldyn_slow_NH.k90" … … 90 99 FIELD_U :: u,hflux,du ! IN, OUT, OUT 91 100 DECLARE_INDICES 101 DECLARE_EDGES 92 102 LOGICAL, PARAMETER :: zero=.TRUE. 93 103 DBL :: ke, uu … … 118 128 FIELD_THETA :: theta, dtheta_rhodz 119 129 DECLARE_INDICES 130 DECLARE_EDGES 120 131 DBL :: divF, du_trisk 121 132 #include "../kernels_unst/coriolis.k90" … … 136 147 FIELD_Z :: qv 137 148 DECLARE_INDICES 149 DECLARE_EDGES 150 DECLARE_VERTICES 138 151 DBL :: etav, hv 139 152 #include "../kernels_unst/pvort_only.k90" … … 147 160 FIELD_U :: u,du ! INOUT,INOUT 148 161 DECLARE_INDICES 162 DECLARE_EDGES 149 163 DBL :: due 150 164 … … 166 180 DOUBLE2(llm,edge_num) :: u 167 181 DECLARE_INDICES 182 DECLARE_EDGES 168 183 DBL :: div_ij 169 184 !$OMP PARALLEL NUM_THREADS(nb_threads)
Note: See TracChangeset
for help on using the changeset viewer.