00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 subroutine psmile_mg_found_loc_to_3d (search, nlev, &
00012 source_grid_type, &
00013 found, locations, len, &
00014 virtual, virtual_cell_required, &
00015 found_3d, locations_3d, virtual_3d, ierror)
00016
00017
00018
00019 use PRISM_constants
00020
00021 use PSMILe, dummy_interface => PSMILe_MG_found_loc_to_3d
00022
00023 implicit none
00024
00025
00026
00027 Type (Enddef_search), Intent (In) :: search
00028
00029
00030
00031 Integer, Intent (In) :: nlev
00032
00033
00034
00035 Integer, Intent (In) :: source_grid_type
00036
00037
00038
00039 Integer, Intent (In) :: len (search%npart, *)
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 Type (integer_vector), Intent (In) :: found (search%npart, ndim_3d)
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 Type (integer_vector), Intent (In) :: locations (search%npart, ndim_3d)
00067
00068
00069
00070
00071 Type (integer_vector), Intent (In) :: virtual (search%npart)
00072
00073
00074
00075
00076
00077 Logical, Intent (In) :: virtual_cell_required
00078
00079
00080
00081
00082
00083
00084 Type (integer_vector), Intent(Out) :: found_3d (search%npart)
00085
00086
00087
00088
00089 Type (integer_vector), Intent(Out) :: locations_3d (search%npart)
00090
00091
00092
00093
00094
00095 Type (integer_vector), Intent(Out) :: virtual_3d (search%npart)
00096
00097
00098
00099
00100
00101 Integer, Intent (Out) :: ierror
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 Integer, Parameter :: indl = 1
00113 Integer, Parameter :: indz = 2
00114
00115 Integer :: i, j, k, ipart, npart
00116 Integer :: search_grid_type
00117 Integer :: not_found
00118
00119
00120
00121 Integer :: len2, len3, nprev
00122 Integer :: leni, lenj, lenk
00123 Integer :: leni_mask, lenj_mask, lenk_mask
00124 Integer :: ii, jj
00125
00126
00127
00128 Integer, parameter :: nerrp = 2
00129 Integer :: ierrp (nerrp)
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153 Character(len=len_cvs_string), save :: mycvs =
00154 '$Id: psmile_mg_found_loc_to_3d.F90 2788 2010-11-30 14:34:07Z hanke $'
00155
00156
00157
00158
00159
00160 #ifdef VERBOSE
00161 print 9990, trim(ch_id)
00162
00163 call psmile_flushstd
00164 #endif /* VERBOSE */
00165
00166 npart = search%npart
00167 search_grid_type = search%grid_type
00168
00169
00170
00171
00172
00173 do ipart = 1, npart
00174
00175 len3 = (search%range(2,1,ipart)-search%range(1,1,ipart)+1) * &
00176 (search%range(2,2,ipart)-search%range(1,2,ipart)+1) * &
00177 (search%range(2,3,ipart)-search%range(1,3,ipart)+1)
00178
00179 #ifdef PRISM_ASSERTION
00180 if (source_grid_type == PRISM_Reglonlatvrt) then
00181 if (search_grid_type == PRISM_Irrlonlatvrt) then
00182 do i = 1, ndim_3d
00183 if (len3 /= len (ipart,i)) then
00184 call psmile_assert (__FILE__, __LINE__, &
00185 "len3 /= len(ipart,i)")
00186 endif
00187 end do
00188 else if (search_grid_type == PRISM_Irrlonlat_Regvrt) then
00189 if (len3 /= len (ipart,1)*len(ipart,3)) then
00190 print *, 'len3, len', len3, len (ipart,1:ndim_3d)
00191 call psmile_assert (__FILE__, __LINE__, &
00192 "len3 /= len(ipart,1)*len(ipart,3)")
00193 endif
00194 else if (search_grid_type == PRISM_Reglonlatvrt) then
00195 if (len3 /= len (ipart,1)*len(ipart,2)*len(ipart,3)) then
00196 print *, 'len3, len', len3, len (ipart,1:ndim_3d)
00197 call psmile_assert (__FILE__, __LINE__, &
00198 "len3 /= Product(len(ipart,1:ndim3d))")
00199 endif
00200 else if (search_grid_type == PRISM_Gaussreduced_regvrt) then
00201 if (len3 /= len (ipart,1)*len(ipart,3)) then
00202 print *, 'len3, len', len3, len (ipart,1:ndim_3d)
00203 call psmile_assert (__FILE__, __LINE__, &
00204 "len3 /= len(ipart,1)*len(ipart,3)")
00205 endif
00206 endif
00207
00208 else if (source_grid_type == PRISM_Irrlonlat_Regvrt) then
00209 if (search_grid_type == PRISM_Irrlonlatvrt) then
00210 do i = 1, 2
00211 if (len3 /= len (ipart,i)) then
00212 call psmile_assert (__FILE__, __LINE__, &
00213 "len3 /= len(ipart,i)")
00214 endif
00215 end do
00216 else if (search_grid_type == PRISM_Gaussreduced_regvrt) then
00217 if (len3 /= len (ipart,1)*len(ipart,2)) then
00218 print *, 'len3, len', len3, len (ipart,1:2)
00219 call psmile_assert (__FILE__, __LINE__, &
00220 "len3 /= len(ipart,1)*len(ipart,2)")
00221 endif
00222 else
00223
00224 if (len3 /= len (ipart,1)*len(ipart,2)) then
00225 print *, 'len3, len', len3, len (ipart,1:2)
00226 call psmile_assert (__FILE__, __LINE__, &
00227 "len3 /= len(ipart,1)*len(ipart,2)")
00228 endif
00229 endif
00230
00231 else if (source_grid_type == PRISM_Gaussreduced_Regvrt) then
00232 if (search_grid_type == PRISM_Irrlonlatvrt) then
00233 do i = 1, 2
00234 if (len3 /= len (ipart,i)) then
00235 call psmile_assert (__FILE__, __LINE__, &
00236 "len3 /= len(ipart,i)")
00237 endif
00238 end do
00239 else if (search_grid_type == PRISM_Gaussreduced_regvrt) then
00240 if (len3 /= len (ipart,1)*len(ipart,2)) then
00241 print *, 'len3, len', len3, len (ipart,1:2)
00242 call psmile_assert (__FILE__, __LINE__, &
00243 "len3 /= len(ipart,1)*len(ipart,3)")
00244 endif
00245 else
00246
00247 if (len3 /= len (ipart,1)*len(ipart,2) ) then
00248 call psmile_assert (__FILE__, __LINE__, &
00249 "len3 /= len(ipart,1)*len(ipart,2)")
00250 endif
00251 endif
00252
00253 else if (source_grid_type == PRISM_Irrlonlatvrt) then
00254 if (len3 /= len (ipart,1)) then
00255 call psmile_assert (__FILE__, __LINE__, &
00256 "len3 /= len(ipart,1)")
00257 endif
00258 endif
00259
00260 if (virtual_cell_required .and. &
00261 source_grid_type /= PRISM_Gaussreduced_regvrt) then
00262
00263 call psmile_assert (__FILE__, __LINE__, &
00264 "virtual_cell_required only available for PRISM_Gaussreduced_regvrt")
00265 endif
00266 #endif
00267
00268 Allocate (found_3d(ipart)%vector(len3), STAT = ierror)
00269 if ( ierror > 0 ) then
00270 ierrp (1) = ierror
00271 ierrp (2) = len3
00272 ierror = PRISM_Error_Alloc
00273 call psmile_error ( ierror, 'found_3d(ipart)%vector', &
00274 ierrp, 2, __FILE__, __LINE__ )
00275 return
00276 endif
00277
00278 Allocate (locations_3d(ipart)%vector(ndim_3d*len3), STAT = ierror)
00279 if ( ierror > 0 ) then
00280 ierrp (1) = ierror
00281 ierrp (2) = len3 * ndim_3d
00282 ierror = PRISM_Error_Alloc
00283 call psmile_error ( ierror, 'locations_3d(ipart)%vector', &
00284 ierrp, 2, __FILE__, __LINE__ )
00285 return
00286 endif
00287
00288 if (virtual_cell_required) then
00289 Allocate (virtual_3d(ipart)%vector(len3), STAT = ierror)
00290 if ( ierror > 0 ) then
00291 ierrp (1) = ierror
00292 ierrp (2) = len3
00293 ierror = PRISM_Error_Alloc
00294 call psmile_error ( ierror, 'virtual(ipart)%vector', &
00295 ierrp, 2, __FILE__, __LINE__ )
00296 return
00297 endif
00298 endif
00299 end do
00300
00301
00302
00303
00304
00305
00306
00307 if (source_grid_type == PRISM_Reglonlatvrt) then
00308
00309 if (search_grid_type == PRISM_Irrlonlatvrt) then
00310
00311
00312
00313
00314
00315
00316 do ipart = 1, npart
00317
00318 do i = 1, len(ipart,1)
00319 found_3d(ipart)%vector(i) = &
00320 min (found(ipart,1)%vector(i), &
00321 found(ipart,2)%vector(i), &
00322 found(ipart,3)%vector(i))
00323 end do
00324 end do
00325
00326 do ipart = 1, npart
00327
00328 do i = 1, len(ipart,1)
00329 locations_3d(ipart)%vector((i-1)*ndim_3d+1) = &
00330 locations(ipart,1)%vector(i)
00331 locations_3d(ipart)%vector((i-1)*ndim_3d+2) = &
00332 locations(ipart,2)%vector(i)
00333 locations_3d(ipart)%vector((i-1)*ndim_3d+3) = &
00334 locations(ipart,3)%vector(i)
00335 end do
00336
00337 end do
00338
00339 else if (search_grid_type == PRISM_Irrlonlat_Regvrt) then
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350 do ipart = 1, npart
00351 do k = 1, len(ipart,3)
00352 nprev = (k-1)*len(ipart,1)
00353
00354 do i = 1, len(ipart,1)
00355 found_3d(ipart)%vector(nprev+i) = &
00356 min (found(ipart,1)%vector(i), &
00357 found(ipart,2)%vector(i), &
00358 found(ipart,3)%vector(k))
00359 end do
00360 end do
00361 end do
00362
00363 do ipart = 1, npart
00364 do k = 1, len(ipart,3)
00365 nprev = (k-1)*len(ipart,1) * ndim_3d
00366
00367 do i = 1, len(ipart,1)
00368 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+1) = &
00369 locations(ipart,1)%vector(i)
00370 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+2) = &
00371 locations(ipart,2)%vector(i)
00372 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+3) = &
00373 locations(ipart,3)%vector(k)
00374 end do
00375
00376 end do
00377 end do
00378
00379 else if (search_grid_type == PRISM_Gaussreduced_Regvrt) then
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390 do ipart = 1, npart
00391
00392 do k = 1, len(ipart,3)
00393 nprev = (k-1)*len(ipart,1)
00394
00395 do i = 1, len(ipart,1)
00396 found_3d(ipart)%vector(nprev+i) = &
00397 min (found(ipart,1)%vector(i), &
00398 found(ipart,2)%vector(i), &
00399 found(ipart,3)%vector(k))
00400 end do
00401 end do
00402 end do
00403
00404 do ipart = 1, npart
00405 do k = 1, len(ipart,3)
00406 nprev = (k-1)*len(ipart,1) * ndim_3d
00407
00408 do i = 1, len(ipart,1)
00409 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+1) = &
00410 locations(ipart,1)%vector(i)
00411 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+2) = &
00412 locations(ipart,2)%vector(i)
00413 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+3) = &
00414 locations(ipart,3)%vector(k)
00415 end do
00416
00417 end do
00418 end do
00419
00420 else if (search_grid_type == PRISM_Reglonlatvrt) then
00421
00422
00423
00424
00425
00426
00427
00428 do ipart = 1, npart
00429 len2 = len(ipart,1) * len(ipart,2)
00430
00431 do k = 1, len(ipart,3)
00432 do j = 1, len(ipart,2)
00433 nprev = (k-1)*len2 + (j-1)*len(ipart,1)
00434
00435
00436
00437 do i = 1, len(ipart,1)
00438 found_3d(ipart)%vector(nprev+i) = &
00439 min (found(ipart,1)%vector(i), &
00440 found(ipart,2)%vector(j), &
00441 found(ipart,3)%vector(k))
00442 end do
00443 end do
00444 end do
00445 end do
00446
00447 do ipart = 1, npart
00448 len2 = len(ipart,1) * len(ipart,2)
00449
00450 do k = 1, len(ipart,3)
00451 do j = 1, len(ipart,2)
00452 nprev = ((k-1)*len2 + (j-1)*len(ipart,1)) * ndim_3d
00453
00454 do i = 1, len(ipart,1)
00455 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+1) = &
00456 locations(ipart,1)%vector(i)
00457 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+2) = &
00458 locations(ipart,2)%vector(j)
00459 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+3) = &
00460 locations(ipart,3)%vector(k)
00461 end do
00462
00463 end do
00464 end do
00465 end do
00466 else
00467
00468
00469
00470 ierrp (1) = search_grid_type
00471 ierror = PRISM_Error_Internal
00472
00473 call psmile_error ( ierror, 'Unknown search grid type', &
00474 ierrp, 1, __FILE__, __LINE__ )
00475 return
00476 endif
00477
00478
00479
00480
00481
00482
00483
00484
00485 else if ( source_grid_type == PRISM_Irrlonlat_Regvrt ) then
00486
00487 if (search_grid_type == PRISM_Irrlonlatvrt) then
00488
00489
00490
00491
00492
00493
00494 do ipart = 1, npart
00495
00496 do i = 1, len(ipart,1)
00497 found_3d(ipart)%vector(i) = &
00498 min (found(ipart,indl)%vector(i), &
00499 found(ipart,indz)%vector(i))
00500 end do
00501 end do
00502
00503 do ipart = 1, npart
00504
00505 do i = 1, len(ipart,1)
00506 locations_3d(ipart)%vector((i-1)*ndim_3d+1) = &
00507 locations(ipart,indl)%vector((i-1)*ndim_2d+1)
00508 locations_3d(ipart)%vector((i-1)*ndim_3d+2) = &
00509 locations(ipart,indl)%vector((i-1)*ndim_2d+2)
00510 locations_3d(ipart)%vector((i-1)*ndim_3d+3) = &
00511 locations(ipart,indz)%vector(i)
00512 end do
00513
00514 end do
00515
00516 else if (search_grid_type == PRISM_Irrlonlat_Regvrt .or. &
00517 search_grid_type == PRISM_Reglonlatvrt) then
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531 do ipart = 1, npart
00532 do k = 1, len(ipart,2)
00533 nprev = (k-1)*len(ipart,1)
00534
00535 do i = 1, len(ipart,1)
00536 found_3d(ipart)%vector(nprev+i) = &
00537 min (found(ipart,indl)%vector(i), &
00538 found(ipart,indz)%vector(k))
00539 end do
00540 end do
00541 end do
00542
00543
00544 do ipart = 1, npart
00545 do k = 1, len(ipart,2)
00546 nprev = (k-1)*len(ipart,1) * ndim_3d
00547
00548 do i = 1, len(ipart,1)
00549 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+1) = &
00550 locations(ipart,indl)%vector( (i-1)*ndim_2d+1)
00551 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+2) = &
00552 locations(ipart,indl)%vector( (i-1)*ndim_2d+2)
00553 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+3) = &
00554 locations(ipart,indz)%vector(k)
00555 end do
00556
00557 end do
00558 end do
00559
00560 else if (search_grid_type == PRISM_Gaussreduced_Regvrt) then
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571 do ipart = 1, npart
00572 do k = 1, len(ipart,2)
00573 nprev = (k-1)*len(ipart,1)
00574
00575 do i = 1, len(ipart,1)
00576 if ( found(ipart,indl)%vector(i) > 1 .or. &
00577 found(ipart,indz)%vector(k) > 1 ) then
00578 found_3d(ipart)%vector(nprev+i) = -(nlev+1)
00579 else
00580 found_3d(ipart)%vector(nprev+i) = &
00581 min (found(ipart,indl)%vector(i), &
00582 found(ipart,indz)%vector(k))
00583 endif
00584 end do
00585 end do
00586 end do
00587
00588 do ipart = 1, npart
00589 do k = 1, len(ipart,2)
00590 nprev = (k-1)*len(ipart,1) * ndim_3d
00591
00592 do i = 1, len(ipart,1)
00593 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+1) = &
00594 locations(ipart,indl)%vector( (i-1)*ndim_2d+1)
00595 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+2) = &
00596 locations(ipart,indl)%vector( (i-1)*ndim_2d+2)
00597 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+3) = &
00598 locations(ipart,indz)%vector(k)
00599 end do
00600
00601 end do
00602 end do
00603
00604 else
00605
00606
00607
00608 ierrp (1) = search_grid_type
00609 ierror = PRISM_Error_Internal
00610
00611 call psmile_error ( ierror, 'Unknown search grid type', &
00612 ierrp, 1, __FILE__, __LINE__ )
00613 return
00614 endif
00615
00616
00617
00618
00619
00620 else if (source_grid_type == PRISM_Gaussreduced_Regvrt ) then
00621
00622 if (search_grid_type == PRISM_Irrlonlatvrt) then
00623
00624
00625
00626
00627
00628
00629 do ipart = 1, npart
00630
00631 do i = 1, len(ipart,1)
00632 found_3d(ipart)%vector(i) = &
00633 min (found(ipart,indl)%vector(i), &
00634 found(ipart,indz)%vector(i))
00635 end do
00636 end do
00637
00638 do ipart = 1, npart
00639
00640 do i = 1, len(ipart,1)
00641 #ifdef STORE_LOCATION_AS_2D
00642 locations_3d(ipart)%vector((i-1)*ndim_3d+1) = &
00643 locations(ipart,indl)%vector((i-1)*ndim_2d+1)
00644 locations_3d(ipart)%vector((i-1)*ndim_3d+2) = &
00645 locations(ipart,indl)%vector((i-1)*ndim_2d+2)
00646 #else
00647 locations_3d(ipart)%vector((i-1)*ndim_3d+1) = &
00648 locations(ipart,indl)%vector(i)
00649 locations_3d(ipart)%vector((i-1)*ndim_3d+2) = 1
00650 #endif
00651 locations_3d(ipart)%vector((i-1)*ndim_3d+3) = &
00652 locations(ipart,indz)%vector(i)
00653 end do
00654
00655 end do
00656
00657 if (virtual_cell_required) then
00658
00659
00660
00661 do ipart = 1, npart
00662 virtual_3d(ipart)%vector(:) = virtual(ipart)%vector(:)
00663 end do
00664 endif
00665
00666 else if (search_grid_type == PRISM_Irrlonlat_Regvrt .or. &
00667 search_grid_type == PRISM_Reglonlatvrt .or. &
00668 search_grid_type == PRISM_Gaussreduced_Regvrt ) then
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682 do ipart = 1, npart
00683 do k = 1, len(ipart,2)
00684 nprev = (k-1)*len(ipart,1)
00685
00686 do i = 1, len(ipart,1)
00687 found_3d(ipart)%vector(nprev+i) = &
00688 min (found(ipart,indl)%vector(i), &
00689 found(ipart,indz)%vector(k))
00690 end do
00691 end do
00692 end do
00693
00694 do ipart = 1, npart
00695 do k = 1, len(ipart,2)
00696 nprev = (k-1)*len(ipart,1) * ndim_3d
00697
00698 do i = 1, len(ipart,1)
00699 #ifdef STORE_LOCATION_AS_2D
00700 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+1) = &
00701 locations(ipart,indl)%vector( (i-1)*ndim_2d+1)
00702 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+2) = &
00703 locations(ipart,indl)%vector( (i-1)*ndim_2d+2)
00704 #else
00705 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+1) = &
00706 locations(ipart,indl)%vector(i)
00707 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+2) = 1
00708 #endif
00709
00710 locations_3d(ipart)%vector(nprev+(i-1)*ndim_3d+3) = &
00711 locations(ipart,indz)%vector(k)
00712 end do
00713
00714 end do
00715 end do
00716
00717 if (virtual_cell_required) then
00718
00719
00720
00721 do ipart = 1, npart
00722 do k = 1, len(ipart,2)
00723 nprev = (k-1)*len(ipart,1)
00724 virtual_3d(ipart)%vector(nprev+1:nprev+len(ipart,1)) = &
00725 virtual(ipart)%vector( 1: len(ipart,1))
00726 end do
00727 end do
00728 endif
00729
00730 else
00731
00732
00733
00734 ierrp (1) = search_grid_type
00735 ierror = PRISM_Error_Internal
00736
00737 call psmile_error ( ierror, 'Unknown search grid type', &
00738 ierrp, 1, __FILE__, __LINE__ )
00739 return
00740 endif
00741
00742
00743
00744
00745
00746
00747
00748 else if (source_grid_type == PRISM_Irrlonlatvrt) then
00749
00750 print 9970, trim(ch_id)
00751
00752 do ipart = 1, npart
00753 found_3d(ipart)%vector(:) = found(ipart,1)%vector(:)
00754 end do
00755
00756 do ipart = 1, npart
00757 locations_3d(ipart)%vector(:) = locations(ipart,1)%vector(:)
00758 end do
00759
00760
00761
00762
00763
00764 else
00765 ierrp (1) = source_grid_type
00766 ierror = PRISM_Error_Internal
00767
00768 call psmile_error ( ierror, 'Unknown source grid type', &
00769 ierrp, 1, __FILE__, __LINE__ )
00770 return
00771
00772 endif
00773
00774
00775
00776
00777
00778
00779
00780 if (Associated(search%search_mask)) then
00781
00782 not_found = - (nlev+1)
00783 do ipart = 1, npart
00784
00785 if ( search%msg_intersections%requires_conserv_remap /= PSMILe_conserv2D .and. &
00786 search%msg_intersections%requires_conserv_remap /= PSMILe_conserv3D ) then
00787
00788 len3 = (search%range(2,1,ipart)-search%range(1,1,ipart)+1) * &
00789 (search%range(2,2,ipart)-search%range(1,2,ipart)+1) * &
00790 (search%range(2,3,ipart)-search%range(1,3,ipart)+1)
00791
00792 do i = 1, len3
00793 if (.not. search%search_mask(ipart)%vector(i)) then
00794 found_3d(ipart)%vector(i) = not_found
00795 endif
00796 end do
00797
00798 else
00799
00800 leni = search%range(2,1,ipart)-search%range(1,1,ipart)+1
00801 lenj = search%range(2,2,ipart)-search%range(1,2,ipart)+1
00802 lenk = search%range(2,3,ipart)-search%range(1,3,ipart)+1
00803
00804 if ( search_grid_type == PRISM_Gaussreduced_Regvrt ) then
00805
00806 if ( search%msg_intersections%requires_conserv_remap == PSMILe_conserv2D ) then
00807 leni_mask = (search%range(2,1,ipart)-search%range(1,1,ipart))/2 + 1
00808 lenj_mask = 1
00809 lenk_mask = search%range(2,3,ipart)-search%range(1,3,ipart)+1
00810 else
00811 leni_mask = (search%range(2,1,ipart)-search%range(1,1,ipart))/2 + 1
00812 lenj_mask = 1
00813 lenk_mask = search%range(2,3,ipart)-search%range(1,3,ipart)
00814 endif
00815
00816 do k = 1, lenk_mask
00817 do j = 1, lenj_mask
00818 do i = 1, leni_mask
00819 ii = (k-1)*lenj_mask*leni_mask+(j-1)*leni_mask+i
00820 if (.not. search%search_mask(ipart)%vector(ii)) then
00821 jj = (k-1)*lenj*leni+(j-1)*leni+i
00822 found_3d(ipart)%vector(jj) = not_found
00823 endif
00824 enddo
00825 enddo
00826 enddo
00827
00828 else
00829
00830 if ( search%msg_intersections%requires_conserv_remap == PSMILe_conserv2D ) then
00831 leni_mask = search%range(2,1,ipart)-search%range(1,1,ipart)
00832 lenj_mask = search%range(2,2,ipart)-search%range(1,2,ipart)
00833 lenk_mask = search%range(2,3,ipart)-search%range(1,3,ipart)+1
00834 else
00835 leni_mask = search%range(2,1,ipart)-search%range(1,1,ipart)
00836 lenj_mask = search%range(2,2,ipart)-search%range(1,2,ipart)
00837 lenk_mask = search%range(2,3,ipart)-search%range(1,3,ipart)
00838 endif
00839
00840 do k = 1, lenk_mask
00841 do j = 1, lenj_mask
00842 do i = 1, leni_mask
00843 ii = (k-1)*lenj_mask*leni_mask+(j-1)*leni_mask+i
00844 if (.not. search%search_mask(ipart)%vector(ii)) then
00845 jj = (k-1)*lenj*leni+(j-1)*leni+i
00846 found_3d(ipart)%vector(jj) = not_found
00847 endif
00848 enddo
00849 enddo
00850 enddo
00851
00852 endif
00853
00854 endif
00855
00856 end do
00857 endif
00858
00859
00860
00861
00862
00863 #ifdef VERBOSE
00864 print 9980, trim(ch_id), ierror
00865
00866 call psmile_flushstd
00867 #endif /* VERBOSE */
00868
00869
00870
00871 9990 format (1x, a, ': psmile_mg_found_loc_to_3d:')
00872 9980 format (1x, a, ': psmile_mg_found_loc_to_3d: eof ierror =', i4)
00873
00874 9970 format (/1x, a, ': ### WARNING PSMILe_MG_found_loc_to_3d called ', &
00875 'for 3d arrays !!!', &
00876 /1x)
00877
00878 end subroutine PSMILe_MG_found_loc_to_3d