Changeset 10725 for vendors/AGRIF/CMEMS_2020/AGRIF_FILES/modmask.F90
- Timestamp:
- 2019-02-27T14:55:54+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendors/AGRIF/CMEMS_2020/AGRIF_FILES/modmask.F90
r10087 r10725 40 40 !! when this one is equal to Agrif_SpecialValue. 41 41 !--------------------------------------------------------------------------------------------------- 42 subroutine Agrif_CheckMasknD ( tempP, parent, pbtab, petab, ppbtab, ppetab, & 43 pbtab_required, petab_required, noraftab, nbdim ) 42 subroutine Agrif_CheckMasknD ( tempP, parent, pbtab, petab, ppbtab, ppetab, noraftab, nbdim ) 44 43 !--------------------------------------------------------------------------------------------------- 45 44 type(Agrif_Variable), pointer :: tempP !< Part of the parent grid used for the interpolation of the child grid … … 47 46 integer, dimension(nbdim) :: pbtab !< limits of the parent grid used 48 47 integer, dimension(nbdim) :: petab !< interpolation of the child grid 49 integer, dimension(nbdim) :: ppbtab, ppetab , pbtab_required, petab_required48 integer, dimension(nbdim) :: ppbtab, ppetab 50 49 logical, dimension(nbdim) :: noraftab 51 50 integer :: nbdim 52 51 ! 53 integer :: i0,j0,k0,l0,m0,n0,ll,kk 54 integer,dimension(:,:),allocatable :: trytoreplace 55 integer :: ilook, Nbvals 56 real :: xold 52 integer :: i0,j0,k0,l0,m0,n0 57 53 ! 58 54 select case (nbdim) … … 81 77 parent%array3(ppbtab(1),ppbtab(2),ppbtab(3)), & 82 78 ppbtab,ppetab,noraftab,MaxSearch,Agrif_SpecialValue) 79 80 ! Call CalculNewValTempP((/i0,j0,k0/), 81 ! & tempP,parent, 82 ! & ppbtab,ppetab, 83 ! & noraftab,nbdim) 84 83 85 endif 84 86 enddo … … 86 88 enddo 87 89 case (4) 88 89 if (noraftab(1).AND.noraftab(2)) then 90 allocate(trytoreplace(pbtab_required(3):petab_required(3),pbtab_required(4):petab_required(4))) 91 trytoreplace = -1 92 i0 = pbtab_required(1) 93 j0 = pbtab_required(2) 94 do l0 = pbtab_required(4),petab_required(4) 95 do k0 = pbtab_required(3),petab_required(3) 90 do l0 = pbtab(4),petab(4) 91 do k0 = pbtab(3),petab(3) 92 do j0 = pbtab(2),petab(2) 93 do i0 = pbtab(1),petab(1) 96 94 if (tempP%array4(i0,j0,k0,l0) == Agrif_SpecialValue) then 97 95 call CalculNewValTempP4D((/i0,j0,k0,l0/), & 98 96 tempP%array4(ppbtab(1),ppbtab(2),ppbtab(3),ppbtab(4)), & 99 97 parent%array4(ppbtab(1),ppbtab(2),ppbtab(3),ppbtab(4)), & 100 ppbtab,ppetab,noraftab,MaxSearch,Agrif_SpecialValue, & 101 trytoreplace(k0,l0)) 102 endif 103 enddo 104 enddo 105 106 do l0 = pbtab_required(4),petab_required(4) 107 do k0 = pbtab_required(3),petab_required(3) 108 if (trytoreplace(k0,l0) /= -1) then 109 do j0 = pbtab_required(2),petab_required(2) 110 do i0 = pbtab_required(1),petab_required(1) 111 112 if (tempP%array4(i0,j0,k0,l0) == Agrif_SpecialValue) then 113 tempP%array4(i0,j0,k0,l0) = 0. 114 Nbvals = 0 115 do ll=max(l0-trytoreplace(k0,l0),ppbtab(4)),min(l0+trytoreplace(k0,l0),ppetab(4)) 116 do kk=max(k0-trytoreplace(k0,l0),ppbtab(3)),min(k0+trytoreplace(k0,l0),ppetab(3)) 117 if (parent%array4(i0,j0,kk,ll) /= Agrif_SpecialValue) then 118 tempP%array4(i0,j0,k0,l0) = tempP%array4(i0,j0,k0,l0) + parent%array4(i0,j0,kk,ll) 119 Nbvals = Nbvals + 1 120 endif 121 enddo 122 enddo 123 124 tempP%array4(i0,j0,k0,l0) = tempP%array4(i0,j0,k0,l0) /Nbvals 125 endif 126 enddo 127 enddo 128 endif 129 enddo 130 enddo 131 deallocate(trytoreplace) 132 133 else 134 135 do l0 = pbtab_required(4),petab_required(4) 136 do k0 = pbtab_required(3),petab_required(3) 137 do j0 = pbtab_required(2),petab_required(2) 138 do i0 = pbtab_required(1),petab_required(1) 139 if (tempP%array4(i0,j0,k0,l0) == Agrif_SpecialValue) then 140 ilook = -1 141 call CalculNewValTempP4D((/i0,j0,k0,l0/), & 142 tempP%array4(ppbtab(1),ppbtab(2),ppbtab(3),ppbtab(4)), & 143 parent%array4(ppbtab(1),ppbtab(2),ppbtab(3),ppbtab(4)), & 144 ppbtab,ppetab,noraftab,MaxSearch,Agrif_SpecialValue,ilook) 145 endif 146 enddo 147 enddo 148 enddo 149 enddo 150 151 endif 98 ppbtab,ppetab,noraftab,MaxSearch,Agrif_SpecialValue) 99 endif 100 enddo 101 enddo 102 enddo 103 enddo 152 104 case (5) 153 105 do m0 = pbtab(5),petab(5) … … 536 488 !--------------------------------------------------------------------------------------------------- 537 489 subroutine CalculNewValTempP4D ( indic, tempP, parent, ppbtab, ppetab, noraftab, & 538 MaxSearch, Agrif_SpecialValue , ilook)490 MaxSearch, Agrif_SpecialValue ) 539 491 !--------------------------------------------------------------------------------------------------- 540 492 integer, parameter :: nbdim = 4 … … 559 511 ! 560 512 logical :: firsttest 561 integer :: ilook562 513 ! 563 514 ValMax = 1 … … 577 528 firsttest = .TRUE. 578 529 idecal = indic 579 580 if (ilook /= -1) then581 i = ilook582 else583 i = 1584 endif585 530 ! 586 531 do while (i <= ValMax) 587 532 ! 588 !if ((i == 1).AND.(firsttest)) i = Valmax533 if ((i == 1).AND.(firsttest)) i = Valmax 589 534 590 535 do iii = 1,nbdim … … 592 537 imin(iii) = max(indic(iii) - i,ppbtab(iii)) 593 538 imax(iii) = min(indic(iii) + i,ppetab(iii)) 594 !if (firsttest) then595 !if (indic(iii) > ppbtab(iii)) then596 !idecal(iii) = idecal(iii)-1597 !if (tempP(idecal(1),idecal(2),idecal(3),idecal(4)) == Agrif_SpecialValue) then598 !imin(iii) = imax(iii)599 !endif600 !idecal(iii) = idecal(iii)+1601 !endif602 !endif539 if (firsttest) then 540 if (indic(iii) > ppbtab(iii)) then 541 idecal(iii) = idecal(iii)-1 542 if (tempP(idecal(1),idecal(2),idecal(3),idecal(4)) == Agrif_SpecialValue) then 543 imin(iii) = imax(iii) 544 endif 545 idecal(iii) = idecal(iii)+1 546 endif 547 endif 603 548 endif 604 549 enddo … … 622 567 ! 623 568 if (Nbvals > 0) then 624 !if (firsttest) then625 !firsttest = .FALSE.626 !i=1627 !cycle628 !endif569 if (firsttest) then 570 firsttest = .FALSE. 571 i=1 572 cycle 573 endif 629 574 630 575 tempP(indic(1),indic(2),indic(3),indic(4)) = Res/Nbvals 631 ilook = i632 576 exit 633 577 else 634 !if (firsttest) exit578 if (firsttest) exit 635 579 i = i + 1 636 580 endif
Note: See TracChangeset
for help on using the changeset viewer.