Reads triangle and unstructured grid information.
More...
|
| subroutine | readmsh (NDS, FNAME) |
| | Reads triangle and unstructured grid information from GMSH files. More...
|
| |
| subroutine | readmsh_iobp (NDS, FNAME) |
| | Reads triangle and unstructured grid information from GMSH files. More...
|
| |
| subroutine | get_boundary_status (STATUS) |
| | Boundary status (code duplication). More...
|
| |
| subroutine | readmshobc (NDS, FNAME, TMPSTA, UGOBCOK) |
| | Reads open boundary information for UNST grids following GMESH type format. More...
|
| |
| subroutine | ug_getopenboundary (TMPSTA, ZBIN, ZLIM) |
| | Defines open boundary points based on depth. More...
|
| |
| subroutine | spatial_grid |
| | Calculates triangle areas and reorders the triangles to have them oriented counterclockwise. More...
|
| |
| subroutine | nvectri |
| | Calculate cell tools: inward normal, angles and length of edges. More...
|
| |
| subroutine | count (TRIGPTEMP) |
| | Calculate global and maximum number of connection for array allocations. More...
|
| |
| subroutine | coordmax |
| | Calculate first point and last point coordinates, and minimum and maximum edge length. More...
|
| |
| subroutine | area_si (IMOD) |
| | Define optimized connection arrays (points and triangles) for spatial propagation schemes. More...
|
| |
| subroutine | is_in_ungrid (IMOD, XTIN, YTIN, ITOUT, IS, JS, RW) |
| | Determine whether a point is inside or outside an unstructured grid, and returns index of triangle and interpolation weights. More...
|
| |
| subroutine | is_in_ungrid2 (IMOD, XTIN, YTIN, FORCE, ITOUT, IS, JS, RW) |
| | Determine whether a point is inside or outside an unstructured grid, and returns index of triangle and interpolation weights. More...
|
| |
| subroutine | ug_gradients (PARAM, DIFFX, DIFFY) |
| | Calculate gradients at a point via its connection. More...
|
| |
| subroutine | w3nestug (DISTMIN, FLOK) |
| | UGTYPE nesting initialization. More...
|
| |
| subroutine | set_iobp (MASK, STATUS) |
| | Setup boundary pointer. More...
|
| |
| subroutine | get_boundary (MNP, MNE, TRIGP, IOBP, NEIGHBOR_PREV, NEIGHBOR_NEXT) |
| | Find boundary points. More...
|
| |
| subroutine | triang_indexes (I, INEXT, IPREV) |
| | Set indices of the triangle. More...
|
| |
| subroutine | set_ug_iobp () |
| | Redefines the values of the boundary points and angle pointers based on the MAPSTA array. More...
|
| |
| subroutine | fix_periodcity (I1, I2, I3, XGRD, YGRD, PT) |
| | Adjust element longitude coordinates for elements straddling the dateline with distance of ~360 degrees. More...
|
| |
Reads triangle and unstructured grid information.
Look for namelist with name NAME in unit NDS and read if found.
- Author
- F. Ardhuin
-
A. Roland
- Date
- 26-Jan-2014
◆ area_si()
| subroutine w3triamd::area_si |
( |
integer, intent(in) |
IMOD | ) |
|
Define optimized connection arrays (points and triangles) for spatial propagation schemes.
The storage is optimize especially considering the iterative solver used. The schemes used are vertex-centered, a point has to be considered within its median dual cell. For a given point, the surface of the dual cell is one third of the sum of the surface of connected triangles.
This routine is from WWM developed in Darmstadt(Aaron Roland).
- Parameters
-
| [in] | IMOD | Model number to point to. |
- Author
- A. Roland
- Date
- 23-Aug-2011
Definition at line 1337 of file w3triamd.F90.
1391 INTEGER,
INTENT(IN) :: IMOD
1395 INTEGER :: COUNTER,ifound,alreadyfound
1396 INTEGER :: I, J, K, II
1397 INTEGER :: IP, IE, POS, POS_I, POS_J, POS_K, IP_I, IP_J, IP_K
1398 INTEGER :: I1, I2, I3, IP2, CHILF(NX)
1399 INTEGER :: TMP(NX), CELLVERTEX(NX,COUNTRI,2)
1400 INTEGER :: COUNT_MAX
1401 DOUBLE PRECISION :: TRIA03
1402 INTEGER,
ALLOCATABLE :: PTABLE(:,:)
1410 CALL strace (ient,
'AREA_SI')
1423 tria03 = 1./3. *
tria(ie)
1424 si(i1) =
si(i1) + tria03
1425 si(i2) =
si(i2) + tria03
1426 si(i3) =
si(i3) + tria03
1429 cellvertex(:,:,:) = 0
1437 chilf(i) = chilf(i)+1
1438 cellvertex(i,chilf(i),1) = ie
1439 cellvertex(i,chilf(i),2) = j
1452 ie_cell(j) = cellvertex(ip,i,1)
1469 ALLOCATE(ptable(count_max,7))
1484 ELSE IF (pos == 2)
THEN
1492 ip_j =
trigp(pos_j,ie)
1493 ip_k =
trigp(pos_k,ie)
1528 ALLOCATE (
grids(imod)%IAA(
nx+1))
1529 ALLOCATE (
grids(imod)%POSI(3,count_max))
1549 IF (tmp(i) .GT. 0)
THEN
1564 DO k =
iaa(ip),
iaa(ip+1) - 1
1565 IF (ip ==
jaa(k))
posi(1,j) = k
1566 IF (ip_j ==
jaa(k))
posi(2,j) = k
1567 IF (ip_k ==
jaa(k))
posi(3,j) = k
1569 WRITE(*,*) .EQ.
'ERROR IN AREA_SI K 0'
References w3gdatmd::ccon, w3gdatmd::fsnimp, w3gdatmd::grids, w3gdatmd::iaa, w3gdatmd::ie_cell, w3gdatmd::index_cell, w3gdatmd::jaa, w3gdatmd::nnz, w3gdatmd::ntri, w3gdatmd::pos_cell, w3gdatmd::posi, w3gdatmd::si, w3servmd::strace(), w3gdatmd::tria, and w3gdatmd::trigp.
Referenced by readmsh(), and w3initmd::w3init().
◆ coordmax()
| subroutine w3triamd::coordmax |
Calculate first point and last point coordinates, and minimum and maximum edge length.
- Author
- F. Ardhuin
- Date
- 15-May-2008
Definition at line 1249 of file w3triamd.F90.
1298 CALL strace (ient,
'COORDMAX')
1314 sx = minval(
len(:,:))
References w3gdatmd::dxymax, w3gdatmd::len, w3gdatmd::maxx, w3gdatmd::maxy, w3servmd::strace(), w3gdatmd::sx, w3gdatmd::sy, w3gdatmd::x0, w3gdatmd::xgrd, w3gdatmd::y0, and w3gdatmd::ygrd.
Referenced by readmsh(), and w3initmd::w3init().
◆ count()
| subroutine w3triamd::count |
( |
integer, dimension(:,:), intent(in) |
TRIGPTEMP | ) |
|
Calculate global and maximum number of connection for array allocations.
- Parameters
-
| [in] | TRIGPTEMP | Temporary array of triangle vertices. |
- Author
- A. Roland
-
F. Ardhuin
- Date
- 15-May-2008
Definition at line 1135 of file w3triamd.F90.
1192 INTEGER,
INTENT(IN) :: TRIGPTEMP(:,:)
1197 INTEGER :: COUNTER, IP, IE, I, J, N(3)
1204 CALL strace (ient,
'COUNT')
1217 n(1) = trigptemp(1,ie)
1218 n(2) = trigptemp(2,ie)
1219 n(3) = trigptemp(3,ie)
1220 conn(n(1)) = conn(n(1)) + 1
1221 conn(n(2)) = conn(n(2)) + 1
1222 conn(n(3)) = conn(n(3)) + 1
References w3gdatmd::countot, w3gdatmd::countri, w3gdatmd::ntri, and w3servmd::strace().
Referenced by readmsh().
◆ fix_periodcity()
| subroutine w3triamd::fix_periodcity |
( |
integer, intent(in) |
I1, |
|
|
integer, intent(in) |
I2, |
|
|
integer, intent(in) |
I3, |
|
|
double precision, dimension(:,:), intent(in) |
XGRD, |
|
|
double precision, dimension(:,:), intent(in) |
YGRD, |
|
|
real*8, dimension(3,2), intent(out) |
PT |
|
) |
| |
Adjust element longitude coordinates for elements straddling the dateline with distance of ~360 degrees.
Detect if element has nodes on both sides of dateline and adjust coordinates so that all nodes have the same sign.
- Parameters
-
| [in] | I1 | |
| [in] | I2 | |
| [in] | I3 | |
| [in] | XGRD | |
| [in] | YGRD | |
| [out] | PT | |
- Author
- Steven Brus
-
Ali Abdolali
- Date
- 21-May-2020
Definition at line 3059 of file w3triamd.F90.
3086 INTEGER,
INTENT(IN) :: I1, I2, I3
3087 DOUBLE PRECISION,
INTENT(IN) :: XGRD(:,:), YGRD(:,:)
3088 real*8,
INTENT(OUT) :: pt(3,2)
3094 INTEGER :: R1GT180, R2GT180, R3GT180
3122 pt(1,1) =
xgrd(1,i1)
3123 pt(1,2) =
ygrd(1,i1)
3124 pt(2,1) =
xgrd(1,i2)
3125 pt(2,2) =
ygrd(1,i2)
3126 pt(3,1) =
xgrd(1,i3)
3127 pt(3,2) =
ygrd(1,i3)
3130 r1gt180 = merge(1, 0, abs(pt(3,1)-pt(2,1)).GT.180)
3131 r2gt180 = merge(1, 0, abs(pt(1,1)-pt(3,1)).GT.180)
3132 r3gt180 = merge(1, 0, abs(pt(2,1)-pt(1,1)).GT.180)
3138 IF ( r1gt180 + r2gt180 == 2 )
THEN
3139 pt(3,1)=pt(3,1)-sign(360.0d0,(pt(3,1)-pt(2,1)))
3140 ELSE IF ( r2gt180 + r3gt180 == 2 )
THEN
3141 pt(1,1)=pt(1,1)-sign(360.0d0,(pt(1,1)-pt(2,1)))
3142 ELSE IF ( r1gt180 + r3gt180 == 2 )
THEN
3143 pt(2,1)=pt(2,1)-sign(360.0d0,(pt(2,1)-pt(3,1)))
Referenced by is_in_ungrid(), nvectri(), and spatial_grid().
◆ get_boundary()
| subroutine w3triamd::get_boundary |
( |
integer, intent(in) |
MNP, |
|
|
integer, intent(in) |
MNE, |
|
|
integer, dimension(3,mne), intent(in) |
TRIGP, |
|
|
integer*2, dimension(mnp), intent(inout) |
IOBP, |
|
|
integer, dimension(mnp), intent(inout) |
NEIGHBOR_PREV, |
|
|
integer, dimension(mnp), intent(inout) |
NEIGHBOR_NEXT |
|
) |
| |
Find boundary points.
- Parameters
-
| [in] | MNP | |
| [in] | MNE | |
| [in] | TRIGP | |
| [in,out] | IOBP | |
| [in,out] | NEIGHBOR_PREV | |
| [in,out] | NEIGHBOR_NEXT | |
- Author
- Aron Roland
-
Mathieu Dutour-Sikiric
- Date
- 01-Jun-2018
Definition at line 2481 of file w3triamd.F90.
2539 INTEGER,
SAVE :: IENT = 0
2542 INTEGER,
INTENT(IN) :: MNP, MNE, TRIGP(3,MNE)
2543 INTEGER*2,
INTENT(INOUT) :: IOBP(MNP)
2544 INTEGER,
INTENT(INOUT) :: NEIGHBOR_PREV(MNP)
2545 INTEGER,
INTENT(INOUT) :: NEIGHBOR_NEXT(MNP)
2547 INTEGER,
POINTER :: STATUS(:)
2548 INTEGER,
POINTER :: COLLECTED(:)
2549 INTEGER,
POINTER :: NEXTVERT(:)
2550 INTEGER,
POINTER :: PREVVERT(:)
2552 INTEGER :: IE, I, IP, IP2, IP3
2553 INTEGER :: ISFINISHED, INEXT, IPREV, ISTAT
2554 INTEGER :: IPNEXT, IPPREV, ZNEXT, ZPREV
2556 CALL strace (ient,
'GET_BOUNDARY')
2558 ALLOCATE(
status(mnp), stat=istat)
2559 check_alloc_status( istat )
2560 ALLOCATE(collected(mnp), stat=istat)
2561 check_alloc_status( istat )
2562 ALLOCATE(prevvert(mnp), stat=istat)
2563 check_alloc_status( istat )
2564 ALLOCATE(nextvert(mnp), stat=istat)
2565 check_alloc_status( istat )
2575 CALL triang_indexes(i, inext, iprev)
2577 ipnext=
trigp(inext,ie)
2578 ipprev=
trigp(iprev,ie)
2579 IF (
status(ip).EQ.0)
THEN
2591 CALL triang_indexes(i, inext, iprev)
2593 ipnext=
trigp(inext,ie)
2594 ipprev=
trigp(iprev,ie)
2595 IF (
status(ip).EQ.0)
THEN
2597 IF (znext.EQ.ipprev)
THEN
2600 IF (nextvert(ip).EQ.prevvert(ip))
THEN
2610 IF ((collected(ip).EQ.0).AND.(
status(ip).EQ.0))
THEN
2612 neighbor_next(ip)=nextvert(ip)
2614 IF (
status(ip).EQ.0)
THEN
2618 IF (isfinished.EQ.1)
THEN
2629 CALL triang_indexes(i, inext, iprev)
2631 ipnext=
trigp(inext,ie)
2632 ipprev=
trigp(iprev,ie)
2633 IF (
status(ip).EQ.0)
THEN
2645 CALL triang_indexes(i, inext, iprev)
2647 ipnext=
trigp(inext,ie)
2648 ipprev=
trigp(iprev,ie)
2649 IF (
status(ip).EQ.0)
THEN
2651 IF (zprev.EQ.ipnext)
THEN
2654 IF (prevvert(ip).EQ.nextvert(ip))
THEN
2664 IF ((collected(ip).EQ.0).AND.(
status(ip).EQ.0))
THEN
2666 neighbor_prev(ip)=prevvert(ip)
2668 IF (
status(ip).EQ.0)
THEN
2672 IF (isfinished.EQ.1)
THEN
2678 ip2=neighbor_next(ip)
2680 ip3=neighbor_prev(ip2)
2681 IF (abs(ip3 - ip).GT.0)
THEN
2682 WRITE(*,*)
'IP=', ip,
' IP2=', ip2,
' IP3=', ip3
2683 WRITE(*,*)
'We have a dramatic inconsistency'
2690 IF (
status(ip).EQ.-1 .AND.
iobp(ip) .EQ. 1)
THEN
2695 DEALLOCATE(
status, stat=istat)
2696 check_dealloc_status( istat )
2697 DEALLOCATE(collected, stat=istat)
2698 check_dealloc_status( istat )
2699 DEALLOCATE(nextvert, stat=istat)
2700 check_dealloc_status( istat )
2701 DEALLOCATE(prevvert, stat=istat)
2702 check_dealloc_status( istat )
References w3servmd::extcde(), w3servmd::strace(), and triang_indexes().
Referenced by set_iobp().
◆ get_boundary_status()
| subroutine w3triamd::get_boundary_status |
( |
integer*2, dimension(nx), intent(out) |
STATUS | ) |
|
Boundary status (code duplication).
- Parameters
-
- Author
- Mathieu Dutour-Sikiric
-
Aron Roland
- Date
- 01-May-2018
Definition at line 511 of file w3triamd.F90.
574 INTEGER,
SAVE :: IENT = 0
580 integer*2,
intent(out) :: STATUS(NX)
581 INTEGER :: COLLECTED(NX), NEXTVERT(NX), PREVVERT(NX)
582 INTEGER :: ISFINISHED, INEXT, IPREV
583 INTEGER :: IPNEXT, IPPREV, ZNEXT, IP, I, IE
585 CALL strace (ient,
'VA_SETUP_IOBPD')
601 ipnext=
trigp(inext,ie)
602 ipprev=
trigp(iprev,ie)
626 ipnext=
trigp(inext,ie)
627 ipprev=
trigp(iprev,ie)
630 IF (znext.eq.ipprev)
THEN
633 IF (nextvert(ip).eq.prevvert(ip))
THEN
642 IF ((collected(ip).eq.0).and.(
status(ip).eq.0))
THEN
649 IF (isfinished.eq.1)
THEN
References yowelementpool::ne_global, yownodepool::np_global, w3gdatmd::ntri, w3gdatmd::nx, w3servmd::strace(), and w3gdatmd::trigp.
◆ is_in_ungrid()
| subroutine w3triamd::is_in_ungrid |
( |
integer, intent(in) |
IMOD, |
|
|
double precision, intent(in) |
XTIN, |
|
|
double precision, intent(in) |
YTIN, |
|
|
integer, intent(out) |
ITOUT, |
|
|
integer, dimension(4), intent(out) |
IS, |
|
|
integer, dimension(4), intent(out) |
JS, |
|
|
real, dimension(4), intent(out) |
RW |
|
) |
| |
Determine whether a point is inside or outside an unstructured grid, and returns index of triangle and interpolation weights.
This is the analogue for triangles of the FUNCTION W3GRMP.
Using barycentric coordinates defined as the ratio of triangle algebric areas which are positive or negative. Computes the 3 interpolation weights for each triangle until they are all positive.
- Parameters
-
| [in] | IMOD | Model number to point to. |
| [in] | XTIN | X-coordinate of target point. |
| [in] | YTIN | Y-coordinate of target point. |
| [out] | ITOUT | Model number to point to. |
| [out] | IS | I indices of vertices of enclosing grid cell. |
| [out] | JS | J indices of vertices of enclosing grid cell. |
| [out] | RW | Array of interpolation weights. |
- Author
- Mathieu Dutour Sikiric, IRB
-
Aron Roland, Z&P
-
Fabrice Ardhuin
- Date
- 26-Jan-2014
Definition at line 1605 of file w3triamd.F90.
1711 INTEGER,
INTENT(IN) :: IMOD
1712 DOUBLE PRECISION,
INTENT(IN) :: XTIN, YTIN
1713 INTEGER,
INTENT(OUT) :: itout
1714 INTEGER,
INTENT(OUT) :: IS(4), JS(4)
1715 REAL,
INTENT(OUT) :: RW(4)
1719 DOUBLE PRECISION :: x1, x2, x3
1720 DOUBLE PRECISION :: y1, y2, y3
1721 DOUBLE PRECISION :: s1, s2, s3, sg1, sg2, sg3
1724 INTEGER :: I1, I2, I3
1728 CALL strace (ient,
'IS_IN_UNGRID')
1735 DO WHILE (nbfound.EQ.0.AND.itri.LT.
grids(imod)%NTRI)
1737 i1=
grids(imod)%TRIGP(1,itri)
1738 i2=
grids(imod)%TRIGP(2,itri)
1739 i3=
grids(imod)%TRIGP(3,itri)
1741 CALL fix_periodcity(i1,i2,i3,
grids(imod)%XGRD,
grids(imod)%YGRD,pt)
1753 sg3=(y3-y1)*(x2-x1)-(x3-x1)*(y2-y1)
1755 s3=(ytin-y1)*(x2-x1)-(xtin-x1)*(y2-y1)
1757 sg1=(y1-y2)*(x3-x2)-(x1-x2)*(y3-y2)
1759 s1=(ytin-y2)*(x3-x2)-(xtin-x2)*(y3-y2)
1761 sg2=(y2-y3)*(x1-x3)-(x2-x3)*(y1-y3)
1763 s2=(ytin-y3)*(x1-x3)-(xtin-x3)*(y1-y3)
1764 IF ((s1*sg1.GE.0).AND.(s2*sg2.GE.0).AND.(s3*sg3.GE.0))
THEN
1774 rw(3)=1.-rw(1)-rw(2)
References w3servmd::extcde(), fix_periodcity(), w3gdatmd::grids, w3odatmd::ndse, and w3servmd::strace().
Referenced by w3iopomd::w3iopp(), wmgridmd::wmglow(), and wmiopomd::wmiopp().
◆ is_in_ungrid2()
| subroutine w3triamd::is_in_ungrid2 |
( |
integer, intent(in) |
IMOD, |
|
|
double precision, intent(in) |
XTIN, |
|
|
double precision, intent(in) |
YTIN, |
|
|
integer, intent(in) |
FORCE, |
|
|
integer, intent(out) |
ITOUT, |
|
|
integer, dimension(4), intent(out) |
IS, |
|
|
integer, dimension(4), intent(out) |
JS, |
|
|
real, dimension(4), intent(out) |
RW |
|
) |
| |
Determine whether a point is inside or outside an unstructured grid, and returns index of triangle and interpolation weights.
This is the analogue for triangles of the FUNCTION W3GRMP.
Using barycentric coordinates defined as the ratio of triangle algebric areas which are positive or negative. Computes the 3 interpolation weights for each triangle until they are all positive.
- Parameters
-
| [in] | IMOD | Model number to point to. |
| [in] | XTIN | X-coordinate of target point. |
| [in] | YTIN | Y-coordinate of target point. |
| [in] | FORCE | |
| [out] | ITOUT | Model number to point to. |
| [out] | IS | I indices of vertices of enclosing grid cell. |
| [out] | JS | J indices of vertices of enclosing grid cell. |
| [out] | RW | Array of interpolation weights. |
- Author
- Mathieu Dutour Sikiric, IRB
-
Aron Roland, Z&P
-
Fabrice Ardhuin
- Date
- 26-Jan-2014
Definition at line 1807 of file w3triamd.F90.
1915 INTEGER,
INTENT(IN) :: IMOD, FORCE
1916 DOUBLE PRECISION,
INTENT(IN) :: XTIN, YTIN
1917 INTEGER,
INTENT(OUT) :: itout
1918 INTEGER,
INTENT(OUT) :: IS(4), JS(4)
1919 REAL,
INTENT(OUT) :: RW(4)
1923 DOUBLE PRECISION :: x1, x2, x3, D1, D2, D3, DISTMIN, DDMIN
1924 DOUBLE PRECISION :: s1, s2, s3, sg1, sg2, sg3, smin, ssum
1925 DOUBLE PRECISION :: y1, y2, y3
1926 INTEGER :: ITRI, ITRIS
1927 INTEGER :: I1, I2, I3
1932 CALL strace (ient,
'IS_IN_UNGRID2')
1942 DO WHILE (nbfound.EQ.0.AND.itri.LT.
grids(imod)%NTRI)
1944 i1=
grids(imod)%TRIGP(1,itri)
1945 i2=
grids(imod)%TRIGP(2,itri)
1946 i3=
grids(imod)%TRIGP(3,itri)
1948 x1=
grids(imod)%XGRD(1,i1)
1949 y1=
grids(imod)%YGRD(1,i1)
1951 x2=
grids(imod)%XGRD(1,i2)
1952 y2=
grids(imod)%XGRD(1,i2)
1954 x3=
grids(imod)%XGRD(1,i3)
1955 y3=
grids(imod)%YGRD(1,i3)
1958 sg3=(y3-y1)*(x2-x1)-(x3-x1)*(y2-y1)
1960 s3=(ytin-y1)*(x2-x1)-(xtin-x1)*(y2-y1)
1962 sg1=(y1-y2)*(x3-x2)-(x1-x2)*(y3-y2)
1964 s1=(ytin-y2)*(x3-x2)-(xtin-x2)*(y3-y2)
1966 sg2=(y2-y3)*(x1-x3)-(x2-x3)*(y1-y3)
1968 s2=(ytin-y3)*(x1-x3)-(xtin-x3)*(y1-y3)
1970 mapstaok = ((
grids(imod)%MAPSTA(1,i1).GE.1).AND. &
1971 (
grids(imod)%MAPSTA(1,i2).GE.1).AND.(
grids(imod)%MAPSTA(1,i3).GE.1))
1972 IF (force.LT.2) mapstaok =.true.
1973 ssum = (xtin-(x1+x2+x3)/3.)**2+(ytin-(y1+y2+y2)/3.)**2
1974 IF (smin.EQ.0.AND. mapstaok ) smin=ssum
1976 IF (ssum.LT.smin .AND. mapstaok )
THEN
1980 IF ((s1*sg1.GE.0).AND.(s2*sg2.GE.0).AND.(s3*sg3.GE.0))
THEN
1990 rw(3)=1.-rw(1)-rw(2)
1994 IF (itout.EQ.0.AND.force.GT.0)
THEN
1996 i1=
grids(imod)%TRIGP(1,itri)
1997 i2=
grids(imod)%TRIGP(2,itri)
1998 i3=
grids(imod)%TRIGP(3,itri)
2000 x1=
grids(imod)%XGRD(1,i1)
2001 y1=
grids(imod)%YGRD(1,i1)
2003 x2=
grids(imod)%XGRD(1,i2)
2004 y2=
grids(imod)%YGRD(1,i2)
2006 x3=
grids(imod)%XGRD(1,i3)
2007 y3=
grids(imod)%YGRD(1,i3)
2008 d1=(xtin-x1)**2+(ytin-y1)**2
2009 d2=(xtin-x2)**2+(ytin-y2)**2
2010 d3=(xtin-x3)**2+(ytin-y3)**2
2011 IF (d1.LE.d2.AND.d1.LE.d3) is(1)=i1
2012 IF (d2.LE.d1.AND.d2.LE.d3) is(1)=i2
2013 IF (d3.LE.d2.AND.d3.LE.d1) is(1)=i3
References w3servmd::extcde(), w3gdatmd::grids, w3odatmd::ndse, and w3servmd::strace().
◆ nvectri()
| subroutine w3triamd::nvectri |
Calculate cell tools: inward normal, angles and length of edges.
To get inward pointing normals, triangle are glanced through anti-clockwisely.
- Author
- A. Roland
- Date
- 15-May-2008
Definition at line 1004 of file w3triamd.F90.
1056 INTEGER :: I1, I2, I3, I11, I22, I33
1058 real*8 :: p1(2), p2(2), p3(2)
1059 real*8 :: r1(2), r2(2), r3(2)
1060 real*8 :: n1(2), n2(2), n3(2)
1069 CALL strace (ient,
'NVECTRI')
1080 CALL fix_periodcity(i1,i2,i3,
xgrd,
ygrd,pt)
1104 len(ie,1) = dsqrt(r1(1)**2+r1(2)**2)
1105 len(ie,2) = dsqrt(r2(1)**2+r2(2)**2)
1106 len(ie,3) = dsqrt(r3(1)**2+r3(2)**2)
References fix_periodcity(), w3gdatmd::ien, w3gdatmd::len, w3gdatmd::ntri, w3servmd::strace(), w3gdatmd::trigp, w3gdatmd::xgrd, and w3gdatmd::ygrd.
Referenced by readmsh(), and w3initmd::w3init().
◆ readmsh()
| subroutine w3triamd::readmsh |
( |
integer, intent(in) |
NDS, |
|
|
character(60), intent(in) |
FNAME |
|
) |
| |
Reads triangle and unstructured grid information from GMSH files.
Calls the subroutines needed to compute grid connectivity. Look for namelist with name NAME in unit NDS and read if found.
- Parameters
-
| [in] | NDS | Data set number used for search. |
| [in] | FNAME | Name of namelist. |
- Author
- F. Ardhuin
-
A. Roland
- Date
- 06-Jun-2018
Definition at line 134 of file w3triamd.F90.
214 INTEGER,
INTENT(IN) :: NDS
215 CHARACTER(60),
INTENT(IN) :: FNAME
219 INTEGER :: i,j,k, NODES, NELTS, ID, KID
220 INTEGER :: ID1, ID2, KID1, ITMP(3)
221 INTEGER :: I1, I2, I3
222 INTEGER(KIND=4) :: Ind,eltype,ntag, INode
223 CHARACTER :: COMSTR*1, SPACE*1 =
' ', cels*64
224 REAL,
ALLOCATABLE :: TAGS(:)
225 CHARACTER(LEN=64),
ALLOCATABLE :: ELS(:)
226 CHARACTER(LEN=120) :: LINE
227 CHARACTER(LEN=50) :: CHTMP
228 CHARACTER(LEN=10) :: A, B, C
229 INTEGER,
ALLOCATABLE :: NELS(:), TRIGPTMP1(:,:), TRIGPTMP2(:,:)
230 INTEGER(KIND=4),
ALLOCATABLE :: IFOUND(:), VERTEX(:), BOUNDTMP(:)
231 DOUBLE PRECISION,
ALLOCATABLE :: XYBTMP1(:,:),XYBTMP2(:,:)
235 READ (nds,
'(A)') comstr
236 IF (comstr.EQ.
' ') comstr =
'$'
237 CALL nextln(comstr, nds, ndse)
239 CALL nextln(comstr, nds, ndse)
248 ALLOCATE(xybtmp1(3,nodes))
250 READ(nds,*) j, xybtmp1(1,i), xybtmp1(2,i), xybtmp1(3,i)
255 ALLOCATE(boundtmp(nodes))
256 n_outside_boundary = 0
257 CALL nextln(comstr, nds, ndse)
259 ALLOCATE(trigptmp1(3,nelts))
262 READ(nds,
'(A100)') line
263 READ(line,*) ind,eltype,ntag
271 READ(line,*) ind,eltype,ntag,tags,inode
272 n_outside_boundary = n_outside_boundary +1
273 boundtmp(n_outside_boundary)=inode
279 READ(line,*) ind,eltype,ntag,tags,itmp
280 trigptmp1(1:3,j) = itmp
288 ALLOCATE(outside_boundary(n_outside_boundary))
289 outside_boundary(:) = boundtmp(1:n_outside_boundary)
292 ALLOCATE(ifound(nodes))
303 ifound(i1)= ifound(i1) + 1
304 ifound(i2)= ifound(i2) + 1
305 ifound(i3)= ifound(i3) + 1
310 ALLOCATE(trigptmp2(3,
ntri),vertex(nodes),xybtmp2(3,nodes))
315 IF( ifound(i) .GT. 0)
THEN
317 xybtmp2(:,j) = xybtmp1(:,i)
330 trigptmp2(1,i) = vertex(i1)
331 trigptmp2(2,i) = vertex(i2)
332 trigptmp2(3,i) = vertex(i3)
335 DEALLOCATE(xybtmp1,ifound,trigptmp1)
340 CALL count(trigptmp2)
346 xgrd(1,i) = xybtmp2(1,i)
347 ygrd(1,i) = xybtmp2(2,i)
352 itmp = trigptmp2(:,i)
356 DEALLOCATE(trigptmp2,xybtmp2)
References area_si(), coordmax(), count(), w3gdatmd::countot, w3servmd::extcde(), file(), w3odatmd::iaproc, w3servmd::itrace(), constants::lpdlib, n_outside_boundary, w3odatmd::ndse, w3odatmd::ndso, w3odatmd::ndst, w3servmd::nextln(), w3gdatmd::nnz, w3gdatmd::ntri, nvectri(), w3gdatmd::nx, outside_boundary, spatial_grid(), w3gdatmd::trigp, w3gdatmd::w3dimug(), w3gdatmd::xgrd, w3gdatmd::ygrd, and w3gdatmd::zb.
◆ readmsh_iobp()
| subroutine w3triamd::readmsh_iobp |
( |
integer, intent(in) |
NDS, |
|
|
character(60), intent(in) |
FNAME |
|
) |
| |
Reads triangle and unstructured grid information from GMSH files.
Calls the subroutines needed to compute grid connectivity. Look for namelist with name NAME in unit NDS and read if found.
- Parameters
-
| [in] | NDS | Data set number used for search. |
| [in] | FNAME | Name of namelist. |
- Author
- Date
Definition at line 389 of file w3triamd.F90.
469 INTEGER,
INTENT(IN) :: NDS
470 CHARACTER(60),
INTENT(IN) :: FNAME
474 INTEGER :: i,j,k, NODES
475 LOGICAL :: lfile_exists
476 CHARACTER :: COMSTR*1, SPACE*1 =
' ', cels*64
477 DOUBLE PRECISION,
ALLOCATABLE :: XYBTMP1(:,:)
479 INQUIRE(
file=fname, exist=lfile_exists)
480 IF (.NOT. lfile_exists)
RETURN
482 READ (nds,
'(A)') comstr
483 IF (comstr.EQ.
' ') comstr =
'$'
484 CALL nextln(comstr, nds, ndse)
486 CALL nextln(comstr, nds, ndse)
491 ALLOCATE(xybtmp1(3,nodes))
493 READ(nds,*) j, xybtmp1(1,i), xybtmp1(2,i), xybtmp1(3,i)
494 IF (int(xybtmp1(3,i)) .EQ. 3)
iobp(i) = 3
References w3servmd::extcde(), file(), w3odatmd::iaproc, w3gdatmd::iobp, w3servmd::itrace(), constants::lpdlib, w3odatmd::ndse, w3odatmd::ndso, w3odatmd::ndst, and w3servmd::nextln().
Referenced by set_ug_iobp().
◆ readmshobc()
| subroutine w3triamd::readmshobc |
( |
integer, intent(in) |
NDS, |
|
|
character(60), intent(in) |
FNAME, |
|
|
integer, dimension(ny,nx), intent(inout) |
TMPSTA, |
|
|
logical, intent(out) |
UGOBCOK |
|
) |
| |
Reads open boundary information for UNST grids following GMESH type format.
- Parameters
-
| [in] | NDS | Data set number used for search. |
| [in] | FNAME | File name. |
| [in,out] | TMPSTA | Status map to be updated (for OBC,TMPSTA = 2). |
| [out] | UGOBCOK | Flag for proper reading of OBC file. |
- Author
- F. Ardhuin
- Date
- 14-Mar-2018
Definition at line 670 of file w3triamd.F90.
729 INTEGER,
INTENT(IN) :: NDS
730 CHARACTER(60),
INTENT(IN) :: FNAME
731 INTEGER,
INTENT(INOUT) :: TMPSTA(NY,NX)
732 LOGICAL,
INTENT(OUT) :: UGOBCOK
737 INTEGER(KIND=4) :: Ind,ntag, INode
738 CHARACTER :: COMSTR*1, SPACE*1 =
' ', cels*64
739 REAL,
ALLOCATABLE :: TAGS(:)
740 CHARACTER(LEN=120) :: LINE
745 READ (nds,
'(A)') comstr
746 IF (comstr.EQ.
' ') comstr =
'$'
747 CALL nextln(comstr, nds,
ndse)
750 READ (nds,
'(A100)',
END=2001,ERR=2002,IOSTAT=IERR) line
751 READ(line,*,iostat=ierr) ind,ntag
754 READ(line,*,iostat=ierr) ind,ntag,tags,inode
772 WRITE (
ndse,1002) ierr
774 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN READMSHOBC : '/ &
775 ' PREMATURE END OF FILE IN READING ',a/)
776 1002
FORMAT (/
' *** WAVEWATCH III ERROR IN READMSHOBC : '/ &
777 ' ERROR IN READING ',a,
' IOSTAT =',i8/)
References w3gdatmd::ccon, w3gdatmd::countcon, w3servmd::extcde(), file(), w3servmd::itrace(), w3odatmd::ndse, w3odatmd::ndso, w3odatmd::ndst, w3servmd::nextln(), w3gdatmd::nx, w3gdatmd::ny, and w3servmd::strace().
◆ set_iobp()
| subroutine w3triamd::set_iobp |
( |
integer, dimension(nx), intent(in) |
MASK, |
|
|
integer*2, dimension(nx), intent(out) |
STATUS |
|
) |
| |
Setup boundary pointer.
- Parameters
-
| [in,out] | MASK | |
| [in,out] | STATUS | |
- Author
- Aron Roland
-
Mathiew Dutour-Sikiric
- Date
- 01-Jun-2018
Definition at line 2319 of file w3triamd.F90.
2382 INTEGER,
INTENT(IN) :: MASK(NX)
2383 INTEGER*2,
INTENT(OUT) :: STATUS(NX)
2385 INTEGER :: COLLECTED(NX), NEXTVERT(NX), PREVVERT(NX)
2386 INTEGER :: ISFINISHED
2387 INTEGER :: INEXT(3), IPREV(3)
2388 INTEGER :: ZNEXT, IP, I, IE, IPNEXT, IPPREV, COUNT
2389 integer nb0, nb1, nbM1
2398 CALL triang_indexes(i, ipnext, ipprev)
2401 IF (
status(ip).EQ.-1)
THEN
2419 CALL triang_indexes(i, ipnext, ipprev)
2422 IF (
status(ip).EQ.-1)
THEN
2424 IF (znext.EQ.ipprev)
THEN
2427 IF (nextvert(ip).EQ.prevvert(ip))
THEN
2440 IF (mask(ip).LE.0)
THEN
2443 IF ((collected(ip).EQ.0).AND.(
status(ip).EQ.-1))
THEN
2446 IF (
status(ip).eq.-1)
THEN
2451 IF (isfinished.EQ.1)
THEN
References get_boundary(), w3odatmd::iaproc, w3gdatmd::ntri, w3gdatmd::nx, w3servmd::strace(), triang_indexes(), and w3gdatmd::trigp.
Referenced by set_ug_iobp(), and ug_getopenboundary().
◆ set_ug_iobp()
| subroutine w3triamd::set_ug_iobp |
Redefines the values of the boundary points and angle pointers based on the MAPSTA array.
Adapted boundary detection from A. Roland and M. Dutour (WWM code).
- Author
- Fabrice Ardhuin
-
Aron Roland
- Date
- 17-Apr-2016
Definition at line 2811 of file w3triamd.F90.
2879 refpars, reflc, refld, &
2899 INTEGER :: ITH, IX, I, J, IP, IE, NDIRSUM
2900 REAL (KIND = 8) :: cossum, sinsum
2901 REAL (KIND = 8) :: dirmin, dirmax, shift, tempo, dircoast
2902 REAL (KIND = 8) :: x1, x2, y1, y2, dxp1, dxp2, dxp3
2903 REAL (KIND = 8) :: dyp1, dyp2, dyp3, edet1, edet2, evx, evy
2904 REAL(KIND=8), parameter :: thr =
tiny(1.)
2905 INTEGER :: I1, I2, I3
2906 INTEGER :: ITMP(NX), NEXTVERT(NX), PREVVERT(NX)
2907 CHARACTER(60) :: FNAME
2909 INTEGER,
SAVE :: IENT = 0
2917 CALL strace (ient,
'SETUGIOBP')
2924 CALL set_iobp(itmp,
iobp)
2925 fname =
'meshbnd.msh'
2926 CALL readmsh_iobp(23456,fname)
2935 IF (
mapsta(1,ip).EQ.2)
THEN
2976 IF (
iobp(ip) .eq. 0)
THEN
2977 edet1 = thr-x1*evy+y1*evx
2978 edet2 = thr+x2*evy-y2*evx
2979 IF ((edet1.gt.0.).and.(edet2.gt.0.))
THEN
3016 IF (
iobp(ip).EQ.0.AND.
mapsta(1,ip).EQ.1)
THEN
3023 ndirsum=ndirsum+
iobpd(ith,ip)
3025 dircoast=atan2(sinsum, cossum)
3027 refld(2,
mapfs(1,ip)) = 4-max(2,nint(4.*real(ndirsum)/real(
nth)))
3028 reflc(1,
mapfs(1,ip))= refpars(1)
References w3adatmd::atrnx, w3adatmd::atrny, w3adatmd::cflxymax, w3adatmd::cg, w3gdatmd::countri, w3adatmd::cx, w3adatmd::cy, w3gdatmd::dth, w3gdatmd::ecos, w3gdatmd::esin, w3odatmd::flbpi, w3idatmd::flcur, w3odatmd::iaproc, w3gdatmd::ien, w3gdatmd::iobp, w3gdatmd::iobpa, w3gdatmd::iobpd, w3adatmd::itime, w3gdatmd::mapfs, w3gdatmd::mapsta, w3gdatmd::nk, w3gdatmd::nsea, w3gdatmd::nth, w3gdatmd::ntri, w3gdatmd::nx, w3gdatmd::ny, readmsh_iobp(), set_iobp(), w3servmd::strace(), w3odatmd::tbpi0, w3odatmd::tbpin, w3gdatmd::trigp, and w3gdatmd::xfr.
Referenced by w3iorsmd::w3iors().
◆ spatial_grid()
| subroutine w3triamd::spatial_grid |
Calculates triangle areas and reorders the triangles to have them oriented counterclockwise.
The triangle surface calculation is based on cross product.
- Author
- A. Roland
-
F. Ardhuin
- Date
- 31-Aug-2011
Definition at line 891 of file w3triamd.F90.
948 REAL :: TL1, TL2, TL3, TMPTRIGP
949 INTEGER :: I1, I2, I3
958 CALL strace (ient,
'SPATIAL_GRID')
968 CALL fix_periodcity(i1,i2,i3,
xgrd,
ygrd,pt)
972 tria(k) = real( (pt(2,2)-pt(1,2)) &
975 *(pt(2,1)-pt(1,1)) )*0.5
981 tmptrigp =
trigp(2,k)
983 trigp(3,k) = tmptrigp
References fix_periodcity(), w3odatmd::ndse, w3gdatmd::ntri, w3servmd::strace(), w3gdatmd::tria, w3gdatmd::trigp, w3gdatmd::xgrd, and w3gdatmd::ygrd.
Referenced by readmsh(), and w3initmd::w3init().
◆ triang_indexes()
| subroutine w3triamd::triang_indexes |
( |
integer, intent(in) |
I, |
|
|
integer, intent(out) |
INEXT, |
|
|
integer, intent(out) |
IPREV |
|
) |
| |
Set indices of the triangle.
- Parameters
-
| [in] | I | |
| [out] | INEXT | |
| [out] | IPREV | |
- Author
- Aron Roland
-
Mathieu Dutour-Sikiric
- Date
- 01-Jun-2018
Definition at line 2720 of file w3triamd.F90.
2776 INTEGER,
SAVE :: IENT = 0
2781 INTEGER,
INTENT(IN) :: I
2782 INTEGER,
INTENT(OUT) :: INEXT, IPREV
2784 CALL strace (ient,
'TRIANG_INDEXES')
References w3servmd::strace().
Referenced by get_boundary(), and set_iobp().
◆ ug_getopenboundary()
| subroutine w3triamd::ug_getopenboundary |
( |
integer, dimension(ny,nx), intent(inout) |
TMPSTA, |
|
|
real, dimension(ny,nx), intent(in) |
ZBIN, |
|
|
real, intent(in) |
ZLIM |
|
) |
| |
Defines open boundary points based on depth.
A boundary node has more node around it than triangles.
- Parameters
-
| [in,out] | TMPSTA | Status map to be updated (for OBC, TMPSTA = 2). |
| [in] | ZBIN | |
| [in] | ZLIM | |
- Author
- F. Ardhuin
- Date
- 30-Aug-2012
Definition at line 797 of file w3triamd.F90.
844 INTEGER,
INTENT(INOUT) :: TMPSTA(NY,NX)
846 INTEGER,
SAVE :: IENT = 0
848 REAL ,
INTENT(IN) :: ZBIN(NY,NX)
849 REAL ,
INTENT(IN) :: ZLIM
856 INTEGER*2 :: STATUS(NX)
859 CALL set_iobp (mask,
status)
862 CALL strace (ient,
'UG_GETOPENBOUNDARY')
864 DO ibc = 1, n_outside_boundary
865 ix = outside_boundary(ibc)
869 IF ((ix.NE.0).AND.(ix.LE.
nx))
THEN
870 IF ( (tmpsta(1,ix).EQ.1) .AND. (
status(ix).EQ.0) .AND. (zbin(1,ix) .LT. zlim)) tmpsta(1,ix) = 2
References w3gdatmd::ccon, w3gdatmd::countcon, w3gdatmd::iobp, n_outside_boundary, w3gdatmd::nx, w3gdatmd::ny, outside_boundary, set_iobp(), and w3servmd::strace().
◆ ug_gradients()
| subroutine w3triamd::ug_gradients |
( |
real, dimension(0:nsea), intent(in) |
PARAM, |
|
|
real, dimension(:,:), intent(out) |
DIFFX, |
|
|
real, dimension(:,:), intent(out) |
DIFFY |
|
) |
| |
Calculate gradients at a point via its connection.
Using linear shape function this is a basis on which all advection schemes in Roland (2008) are checked.
- Parameters
-
| [in] | PARAM | Depth or current field (indices 0 to NSEA). |
| [out] | DIFFX | X gradient (indices 1 to NX). |
| [out] | DIFFY | Y gradient (indices 1 to NY). |
- Author
- F. Ardhuin
-
A. Roland
- Date
- 14-Oct-2013
Definition at line 2039 of file w3triamd.F90.
2096 REAL,
INTENT(IN) :: PARAM(0:NSEA)
2097 REAL,
INTENT(OUT) :: DIFFX(:,:), DIFFY(:,:)
2101 INTEGER :: VERTICES(3), NI(3), NI_GL(3)
2102 REAL :: TMP1(3), TMP2(3)
2103 INTEGER :: I, IX, IE, IE_GL
2104 REAL :: VAR(3), FACT, LATMEAN
2105 REAL :: DIFFXTMP, DIFFYTMP
2106 REAL :: DEDX(3), DEDY(3)
2107 REAL :: DVDXIE, DVDYIE
2108 REAL :: WEI(NX), WEI_LOCAL(NSEAL)
2109 real*8 :: rtmp(
nseal)
2127 wei(ni) = wei(ni) + 2.*
tria(ie)
2134 var = param(
mapfs(1,ni)) * fact
2135 dvdxie = dot_product( var,dedx)
2136 dvdyie = dot_product( var,dedy)
2137 diffx(1,ni) = diffx(1,ni) + dvdxie * latmean
2138 diffy(1,ni) = diffy(1,ni) + dvdyie
2140 diffx(1,:) = diffx(1,:)/wei
2141 diffy(1,:) = diffy(1,:)/wei
2148 ni_gl =
trigp(:,ie_gl)
2150 wei_local(ni) = wei_local(ni) + 2.*
pdlib_tria(ie)
2157 var = param(
mapfs(1,ni_gl)) * fact
2158 dvdxie = dot_product(var,dedx)
2159 dvdyie = dot_product(var,dedy)
2160 diffx(1,ni) = diffx(1,ni) + dvdxie * latmean
2161 diffy(1,ni) = diffy(1,ni) + dvdyie
2163 diffx(1,:) = diffx(1,:)/wei_local
2164 diffy(1,:) = diffy(1,:)/wei_local
References w3gdatmd::angle, w3gdatmd::clatis, constants::dera, w3gdatmd::flagll, yowelementpool::ielg, w3gdatmd::ien, yowelementpool::ine, w3gdatmd::iobp, constants::lpdlib, w3gdatmd::mapfs, w3gdatmd::mapsta, yowelementpool::ne, yownodepool::npa, w3gdatmd::nsea, w3gdatmd::nseal, w3adatmd::nsealm, w3gdatmd::ntri, w3gdatmd::nx, yowexchangemodule::pdlib_exchange1dreal(), yownodepool::pdlib_ien, yownodepool::pdlib_tria, constants::radius, w3gdatmd::tria, and w3gdatmd::trigp.
Referenced by w3wavemd::w3wave().
◆ w3nestug()
| subroutine w3triamd::w3nestug |
( |
real, intent(in) |
DISTMIN, |
|
|
logical, intent(inout) |
FLOK |
|
) |
| |
UGTYPE nesting initialization.
- Parameters
-
- Author
- Aron Roland
-
Mathieu Dutour-Sikiric
- Date
- 01-Jun-2018
Definition at line 2184 of file w3triamd.F90.
2236 REAL,
INTENT(IN) :: DISTMIN
2237 LOGICAL,
INTENT(INOUT) :: FLOK
2239 INTEGER :: I, J, JMEMO, IS, IX, N, IX1(NBI)
2251 IF (abs(
mapsta(1,ix)) .EQ. 2)
THEN
2254 WRITE(
ndse,*)
'Error: boundary node index > NBI ... nest.ww3 file is not consistent with mod_def.ww3'
2259 WRITE(
ndse ,*)
'ADDING BOUNDARY POINT:',n,ix
2272 IF (dist.LT.dist0)
THEN
2273 is =
mapfs(1,ix1(j))
2280 IF (dist0.LE.distmin)
THEN
2283 WRITE(
ndse ,
'(A,I6,A,I7,A,I6)')
'MATCHED BOUNDARY POINT:',i,
'GRID POINT:', &
2284 mapsf(is,1),
'INDEX IN nest.ww3:', jmemo
2292 IF ( n .NE.
nbi)
THEN
2295 WRITE(6,*)
'THIS POINT HAS MAPSTA=2:',
isbpi(j)
2300 900
FORMAT (/
' *** WAVEWATCH III ERROR IN W3IOBC : '/ &
2301 ' NUMBER OF MAPSTA=2 DIFFERS FROM NUMBER IN nest.ww3 '/ &
2302 ' CHECK nest.ww3 AND ww3_grid.inp ',2i8/)
References w3odatmd::isbpi, w3gdatmd::mapfs, w3gdatmd::mapsf, w3gdatmd::mapsta, w3odatmd::nbi, w3odatmd::ndse, w3gdatmd::nx, w3servmd::strace(), w3odatmd::xbpi, w3gdatmd::xgrd, w3odatmd::ybpi, and w3gdatmd::ygrd.
Referenced by w3iobcmd::w3iobc().
◆ n_outside_boundary
| integer, save w3triamd::n_outside_boundary |
◆ outside_boundary
| integer, dimension(:), allocatable, save w3triamd::outside_boundary |
integer, dimension(:,:), pointer trigp
integer, dimension(:), pointer tbpi0
subroutine nextln(CHCKC, NDSI, NDSE)
integer, dimension(:), pointer iaa
integer, dimension(:), allocatable, target, public ielg
global element array.
subroutine, public pdlib_exchange1dreal(U)
exchange values in U.
double precision, dimension(:,:), pointer ygrd
Define data structures to set up wave model auxiliary data for several models simultaneously.
real, dimension(:), pointer clatis
real, dimension(:), pointer zb
real, parameter dera
DERA Conversion factor from degrees to radians.
real, dimension(:,:), pointer atrnx
real, dimension(:), pointer cflxymax
real, dimension(:,:), pointer cg
integer, dimension(:), pointer ie_cell
real, dimension(:,:), pointer atrny
double precision, dimension(:,:), pointer xgrd
real, dimension(:), pointer ecos
type(grid), dimension(:), allocatable, target grids
real, dimension(:), pointer ybpi
integer, dimension(:), pointer tbpin
integer, public npa
number of ghost + resident nodes this partition holds
integer *1, dimension(:), pointer iobpa
integer, public ne
number of local elements
real(kind=scrip_r8), parameter tiny
integer, public np_global
number of nodes, global
character(len=8), dimension(max_timers), save status
real(8), dimension(:,:), pointer len
integer, dimension(:,:), pointer mapfs
real, dimension(:), pointer esin
Has data that belong to nodes.
logical lpdlib
LPDLIB Logical for using the PDLIB library.
real(8), dimension(:), pointer tria
subroutine w3dimug(IMOD, MTRI, MX, COUNTOTA, NNZ, NDSE, NDST)
real(8), dimension(:,:), pointer ien
real, dimension(:), pointer cy
integer, dimension(:,:), pointer mapsf
real, dimension(:), pointer xbpi
Has only the ghost nodes assign to a neighbor domain.
file(STRINGS ${CMAKE_BINARY_DIR}/switch switch_strings) separate_arguments(switches UNIX_COMMAND $
real, parameter radius
RADIUS Radius of the earth (m).
integer *1, dimension(:,:), pointer iobpd
integer, dimension(:), pointer jaa
integer, dimension(:,:), allocatable, target, public ine
number of elements of the augmented domain
subroutine strace(IENT, SNAME)
Define data structures to set up wave model input data for several models simultaneously.
integer, public ne_global
number of elements, global
real(rkind), dimension(:), allocatable, target, public pdlib_tria
integer, dimension(:), pointer ccon
integer *2, dimension(:), pointer iobp
real(8), dimension(:), pointer si
Define some much-used constants for global use (all defined as PARAMETER).
real, dimension(:,:), pointer angle
subroutine extcde(IEXIT, UNIT, MSG, FILE, LINE, COMM)
real(rkind), dimension(:,:), allocatable, target, public pdlib_ien
subroutine itrace(NDS, NMAX)
integer, dimension(:), pointer countcon
integer, dimension(:), pointer index_cell
integer, dimension(:), pointer isbpi
real, dimension(:), pointer cx
integer, dimension(:), pointer pos_cell
integer, dimension(:,:), pointer mapsta
integer, dimension(:,:), pointer posi