Fri 29 Nov 2024 04:30:50 PM CET
This commit is contained in:
parent
54752865ff
commit
54a704bc88
141
src/SimNDT/engine/EFIT2Dcython.pyx
Normal file
141
src/SimNDT/engine/EFIT2Dcython.pyx
Normal file
|
@ -0,0 +1,141 @@
|
|||
cimport cython
|
||||
cimport numpy as np
|
||||
|
||||
|
||||
@cython.boundscheck(False) # turn of bounds-checking for entire function
|
||||
@cython.wraparound(False)
|
||||
def sourceVel(np.float32_t[:,:] Vx, np.float32_t[:,:] Vy,
|
||||
np.int32_t[:] XL,
|
||||
np.int32_t[:] YL,
|
||||
double source, int Stype, win, double dtdxx):
|
||||
|
||||
cdef unsigned int i
|
||||
cdef int ii, jj
|
||||
cdef int N = XL.shape[0]
|
||||
|
||||
if Stype == 0:
|
||||
for i in range(N):
|
||||
ii = XL[i]
|
||||
jj = YL[i]
|
||||
Vx[ii, jj] -= source*dtdxx * win[i]
|
||||
|
||||
elif Stype ==1:
|
||||
for i in range(N):
|
||||
ii = XL[i]
|
||||
jj = YL[i]
|
||||
Vy[ii,jj] -= source*dtdxx * win[i]
|
||||
|
||||
elif Stype ==2:
|
||||
for i in range(N):
|
||||
ii = XL[i]
|
||||
jj = YL[i]
|
||||
Vx[ii,jj] -= source* dtdxx * win[i]
|
||||
Vy[ii,jj] -= source* dtdxx * win[i]
|
||||
|
||||
|
||||
return (Vx, Vy)
|
||||
|
||||
|
||||
@cython.boundscheck(False) # turn of bounds-checking for entire function
|
||||
@cython.wraparound(False)
|
||||
def sourceStress(np.float32_t[:,:] Txx, np.float32_t[:,:] Tyy,
|
||||
np.int32_t[:] XL, np.int32_t[:] YL,
|
||||
double source, int Stype, win, double dtdxx):
|
||||
|
||||
cdef int N = XL.shape[0]
|
||||
cdef unsigned int i
|
||||
cdef int ii, jj
|
||||
|
||||
if Stype ==0:
|
||||
for i in range(0, N):
|
||||
Txx[XL[i],YL[i]] -= source*dtdxx * win[i]
|
||||
|
||||
elif Stype ==1:
|
||||
for i in range(0, N):
|
||||
Tyy[XL[i],YL[i]] -= source*dtdxx * win[i]
|
||||
|
||||
elif Stype ==2:
|
||||
for i in range(0, N):
|
||||
Txx[XL[i],YL[i]] -= source* dtdxx * win[i]
|
||||
Tyy[XL[i],YL[i]] -= source* dtdxx * win[i]
|
||||
|
||||
|
||||
return (Txx, Tyy)
|
||||
|
||||
|
||||
@cython.boundscheck(False)
|
||||
@cython.wraparound(False)
|
||||
def velocityVoigt(np.float32_t[:,:] Txx, np.float32_t[:,:] Txy, np.float32_t[:,:] Tyy,
|
||||
np.float32_t[:,:] vx, np.float32_t[:,:] vy, np.float32_t[:,:] d_vx, np.float32_t[:,:] d_vy,
|
||||
np.float32_t[:,:] BX, np.float32_t[:,:] BY, np.float32_t[:,:] ABS, double ddx, double dt):
|
||||
|
||||
|
||||
cdef int M = Txx.shape[0]
|
||||
cdef int N = Txx.shape[1]
|
||||
cdef int i
|
||||
cdef int j
|
||||
|
||||
|
||||
for i in range(0,M-1):
|
||||
for j in range(1,N):
|
||||
d_vx[i,j] = (BX[i,j] * ddx) * ( Txx[i+1,j] - Txx[i,j] + Txy[i,j] - Txy[i,j-1] )
|
||||
vx[i,j] += dt * d_vx[i,j]
|
||||
|
||||
|
||||
for i in range(1,M):
|
||||
for j in range(0, N-1):
|
||||
d_vy[i,j] = (BY[i,j] * ddx) * ( Txy[i,j] - Txy[i-1,j] + Tyy[i,j+1] - Tyy[i,j] )
|
||||
vy[i,j] += dt * d_vy[i,j]
|
||||
|
||||
for i in range(0,M):
|
||||
for j in range(0,N):
|
||||
vx[i,j] *= ABS[i,j]
|
||||
vy[i,j] *= ABS[i,j]
|
||||
|
||||
|
||||
|
||||
return (vx, vy, d_vx, d_vy)
|
||||
|
||||
|
||||
@cython.boundscheck(False) # turn of bounds-checking for entire function
|
||||
@cython.wraparound(False)
|
||||
def stressVoigt(np.float32_t[:,:] Txx, np.float32_t[:,:] Txy, np.float32_t[:,:] Tyy,
|
||||
np.float32_t[:,:] vx, np.float32_t[:,:] vy, np.float32_t[:,:] d_vx, np.float32_t[:,:] d_vy,
|
||||
np.float32_t[:,:] C11, np.float32_t[:,:] C12, np.float32_t[:,:] C44,
|
||||
np.float32_t[:,:] ETA_VS, np.float32_t[:,:] ETA_S, np.float32_t[:,:] ETA_SS,
|
||||
np.float32_t[:,:] ABS, double dtx):
|
||||
|
||||
|
||||
cdef int M = Txx.shape[0]
|
||||
cdef int N = Txx.shape[1]
|
||||
cdef int i
|
||||
cdef int j
|
||||
|
||||
for i in range(1,M):
|
||||
for j in range(1,N):
|
||||
Txx[i,j] += ( ( C11[i,j] * dtx )*(vx[i,j] - vx[i-1,j]) +
|
||||
( C12[i,j] * dtx )*(vy[i,j] - vy[i,j-1]) +
|
||||
( (ETA_VS[i,j]) * dtx) * (d_vx[i,j] - d_vx[i-1,j]) +
|
||||
( (ETA_S [i,j]) * dtx) * (d_vy[i,j] - d_vy[i,j-1]) )
|
||||
|
||||
Tyy[i,j] += ( ( C12[i,j]* dtx )*(vx[i,j] - vx[i-1,j]) +
|
||||
( C11[i,j]* dtx )*(vy[i,j] - vy[i,j-1]) +
|
||||
( (ETA_VS[i,j])*dtx) *(d_vy[i,j] - d_vy[i,j-1]) +
|
||||
( (ETA_S [i,j])*dtx) * (d_vx[i,j] - d_vx[i-1,j]) )
|
||||
|
||||
for i in range(0, M-1):
|
||||
for j in range(0, N-1):
|
||||
Txy[i,j] += ( ( C44[i,j] * dtx )*(vx[i,j+1] - vx[i,j] + vy[i+1,j] - vy[i,j]) +
|
||||
( ETA_SS[i,j] * dtx )*(d_vx[i,j+1] - d_vx[i,j] + d_vy[i+1,j] - d_vy[i,j] ) )
|
||||
|
||||
for i in range(0,M):
|
||||
for j in range(0,N):
|
||||
Txx[i,j] *= ABS[i,j];
|
||||
Tyy[i,j] *= ABS[i,j];
|
||||
Txy[i,j] *= ABS[i,j];
|
||||
|
||||
|
||||
return (Txx, Tyy, Txy)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user