Changeset 10087 for vendors/AGRIF/CMEMS_2020/AGRIF_FILES/modmask.F90
- Timestamp:
- 2018-09-05T15:33:44+02:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendors/AGRIF/CMEMS_2020/AGRIF_FILES/modmask.F90
r5656 r10087 40 40 !! when this one is equal to Agrif_SpecialValue. 41 41 !--------------------------------------------------------------------------------------------------- 42 subroutine Agrif_CheckMasknD ( tempP, parent, pbtab, petab, ppbtab, ppetab, noraftab, nbdim ) 42 subroutine Agrif_CheckMasknD ( tempP, parent, pbtab, petab, ppbtab, ppetab, & 43 pbtab_required, petab_required, noraftab, nbdim ) 43 44 !--------------------------------------------------------------------------------------------------- 44 45 type(Agrif_Variable), pointer :: tempP !< Part of the parent grid used for the interpolation of the child grid … … 46 47 integer, dimension(nbdim) :: pbtab !< limits of the parent grid used 47 48 integer, dimension(nbdim) :: petab !< interpolation of the child grid 48 integer, dimension(nbdim) :: ppbtab, ppetab 49 integer, dimension(nbdim) :: ppbtab, ppetab, pbtab_required, petab_required 49 50 logical, dimension(nbdim) :: noraftab 50 51 integer :: nbdim 51 52 ! 52 integer :: i0,j0,k0,l0,m0,n0 53 integer :: i0,j0,k0,l0,m0,n0,ll,kk 54 integer,dimension(:,:),allocatable :: trytoreplace 55 integer :: ilook, Nbvals 56 real :: xold 53 57 ! 54 58 select case (nbdim) … … 77 81 parent%array3(ppbtab(1),ppbtab(2),ppbtab(3)), & 78 82 ppbtab,ppetab,noraftab,MaxSearch,Agrif_SpecialValue) 79 80 ! Call CalculNewValTempP((/i0,j0,k0/),81 ! & tempP,parent,82 ! & ppbtab,ppetab,83 ! & noraftab,nbdim)84 85 83 endif 86 84 enddo … … 88 86 enddo 89 87 case (4) 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) 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) 94 96 if (tempP%array4(i0,j0,k0,l0) == Agrif_SpecialValue) then 95 97 call CalculNewValTempP4D((/i0,j0,k0,l0/), & 96 98 tempP%array4(ppbtab(1),ppbtab(2),ppbtab(3),ppbtab(4)), & 97 99 parent%array4(ppbtab(1),ppbtab(2),ppbtab(3),ppbtab(4)), & 98 ppbtab,ppetab,noraftab,MaxSearch,Agrif_SpecialValue) 99 endif 100 enddo 101 enddo 102 enddo 103 enddo 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 104 152 case (5) 105 153 do m0 = pbtab(5),petab(5) … … 488 536 !--------------------------------------------------------------------------------------------------- 489 537 subroutine CalculNewValTempP4D ( indic, tempP, parent, ppbtab, ppetab, noraftab, & 490 MaxSearch, Agrif_SpecialValue )538 MaxSearch, Agrif_SpecialValue, ilook ) 491 539 !--------------------------------------------------------------------------------------------------- 492 540 integer, parameter :: nbdim = 4 … … 511 559 ! 512 560 logical :: firsttest 561 integer :: ilook 513 562 ! 514 563 ValMax = 1 … … 528 577 firsttest = .TRUE. 529 578 idecal = indic 579 580 if (ilook /= -1) then 581 i = ilook 582 else 583 i = 1 584 endif 530 585 ! 531 586 do while (i <= ValMax) 532 587 ! 533 if ((i == 1).AND.(firsttest)) i = Valmax588 ! if ((i == 1).AND.(firsttest)) i = Valmax 534 589 535 590 do iii = 1,nbdim … … 537 592 imin(iii) = max(indic(iii) - i,ppbtab(iii)) 538 593 imax(iii) = min(indic(iii) + i,ppetab(iii)) 539 if (firsttest) then540 if (indic(iii) > ppbtab(iii)) then541 idecal(iii) = idecal(iii)-1542 if (tempP(idecal(1),idecal(2),idecal(3),idecal(4)) == Agrif_SpecialValue) then543 imin(iii) = imax(iii)544 endif545 idecal(iii) = idecal(iii)+1546 endif547 endif594 ! if (firsttest) then 595 ! if (indic(iii) > ppbtab(iii)) then 596 ! idecal(iii) = idecal(iii)-1 597 ! if (tempP(idecal(1),idecal(2),idecal(3),idecal(4)) == Agrif_SpecialValue) then 598 ! imin(iii) = imax(iii) 599 ! endif 600 ! idecal(iii) = idecal(iii)+1 601 ! endif 602 ! endif 548 603 endif 549 604 enddo … … 567 622 ! 568 623 if (Nbvals > 0) then 569 if (firsttest) then570 firsttest = .FALSE.571 i=1572 cycle573 endif624 ! if (firsttest) then 625 ! firsttest = .FALSE. 626 ! i=1 627 ! cycle 628 ! endif 574 629 575 630 tempP(indic(1),indic(2),indic(3),indic(4)) = Res/Nbvals 631 ilook = i 576 632 exit 577 633 else 578 if (firsttest) exit634 ! if (firsttest) exit 579 635 i = i + 1 580 636 endif
Note: See TracChangeset
for help on using the changeset viewer.