#observable_list = ["E","R","delta","surfacetwist","stress"] for js, Lambda in enumerate(Lambdas): scan['\\Lambda'] = Lambda obsfwd = ObservableData(["strain"], scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) #obsfwd.sort_observables() #obsfwd.remove_duplicates() if len(obsfwd.data) == 6 or obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ", Lambda) Larray[js] = np.nan continue strains = obsfwd.data[:, 0] stresses = np.gradient(obsfwd.E(), strains) stresses[0] = 0.0 youngs[js] = (stresses[1] - stresses[0]) / (strains[1] - strains[0]) breaks[js] = strains[np.argmax( stresses[stresses == stresses])] * 100 print(Lambda, breaks[js]) ax["youngs"].plot(Larray, youngs,
scan['\\gamma_s']=gamma scan['k_{24}']=k24 scan['\\omega']=omega scan['\\Lambda']=Lambda obsfwd = ObservableData(["strain","averagetwist"],scan_dir='scanforward', scan=scan,loadsuf=loadsuf, savesuf=savesuf) Req = obsfwd.R()[0] print(Req) strains = obsfwd.data[:,0] stresses = np.gradient(obsfwd.E(),strains)*K22*q*q/1000 # stress in kPa stresses[0] = 0.0 ysfwd = [stresses,obsfwd.data[:,1],obsfwd.delta()] if obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ",Lambda) for j,observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$<\psi>$' + ' (' + r"$\si{\radian}$" + ')' elif observable == "stress": ylabel = r"$\tilde{\sigma}$" + ' (' + r"$\si{\kilo\pascal}$" + ')' elif observable == 'delta':
scan_dir='scanbackward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) print(k24) # find all spots where two distinct phases exist (two different radii values) bool_1 = np.isclose(obsfwd.R(), obsbkwd.R(), rtol=1e-3) find_j = np.where(bool_1 == False)[0] if find_j.size > 0: # if two distinct phases exist, then: # smallest gamma value that they both exist at jsmall = find_j[0] # largest gamma value that they both exist at jlarge = find_j[-1] # find the point where the fwd E becomes larger than the bkwd E j = (np.argmin( np.abs(obsfwd.E()[jsmall:jlarge + 1] - obsbkwd.E()[jsmall:jlarge + 1])) + len(obsfwd.E()[:jsmall])) pstr = f"{k24:.2e} {gammas[j]:.2e} {jsmall} {obsfwd.R()[j]:.2e} {obsbkwd.R()[j]:.2e}" obsfwd.data[j:, :] = obsbkwd.data[j:, :] np.savetxt(obsfwd.observable_sname("observables", plot_format="txt"), obsfwd.data, fmt='\t'.join(["%13.6e"] + ["%15.8e"] * 5))
savesuf=savesuf) if not obsfwd.file_exists: continue obsfwd.sort_observables() obsfwd.remove_duplicates() Lambdas = obsfwd.data[:,0] #obsbkwd = ObservableData(["\\Lambda"],scan_dir='scanbackward',scan=scan,loadsuf=loadsuf, # savesuf=savesuf) #obsbkwd.sort_observables() ysfwd = [obsfwd.E(),obsfwd.R(),obsfwd.eta(),obsfwd.delta(),obsfwd.surfacetwist()] #ysbkwd = [obsbkwd.E(),obsbkwd.R(),obsbkwd.eta(),obsbkwd.delta(),obsbkwd.surfacetwist()] for i,observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$\psi(R)$' elif observable == 'eta': ylabel = r'$2\pi/\eta$' ysfwd[i] = 2*np.pi/ysfwd[i] elif observable == 'delta': ylabel = r'$\delta/\delta_0$' ysfwd[i] = ysfwd[i]/np.sqrt(2/3) elif len(observable) > 1:
scan['\\gamma_s'] = gamma scan['k_{24}'] = k24 scan['\\omega'] = omega scan['\\Lambda'] = Lambda obsfwd = ObservableData(["strain", "averagetwist"], scan_dir=f'scanforward{type}', scan=scan, loadsuf=loadsuf, savesuf=savesuf) Req = obsfwd.R()[0] print(Req) strains = obsfwd.data[:, 0] stresses = np.gradient(obsfwd.E(), strains) * K22 * q * q / 1000 # stress in kPa stresses[0] = 0.0 avgtwist = obsfwd.data[:, 1] minindex = np.argmin(avgtwist) ysfwd = [stresses, avgtwist, obsfwd.delta()] if obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ", Lambda) for j, observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$<\psi>$' + ' (' + r"$\si{\radian}$" + ')' elif observable == "stress": ylabel = r"$\tilde{\sigma}$" + ' (' + r"$\si{\kilo\pascal}$" + ')' elif observable == 'delta':
for js, Lambda in enumerate(Lambdas): scan['\\Lambda'] = Lambda print(Lambda) obsfwd = ObservableData(["strain"], scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) #obsfwd.sort_observables() #obsfwd.remove_duplicates() strains = obsfwd.data[:, 0] stresses = np.gradient(obsfwd.E(), strains) stresses[0] = 0.0 #ysfwd = [obsfwd.E(),obsfwd.R(),obsfwd.delta(),obsfwd.surfacetwist(),stresses] ysfwd = [stresses, obsfwd.delta(), obsfwd.surfacetwist()] if obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ", Lambda) continue for i, observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$\psi(R)$' elif observable == "stress": ylabel = r"$\sigma$" elif observable == 'delta': ylabel = r'$\delta/\delta_0$'
scan = {} scan['\\Lambda'] = Lambda scan['k_{24}'] = k24 scan['\\omega'] = omega obsfwd = ObservableData(["\\gamma_s"], scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) gammas = obsfwd.data[:, 0] ysfwd = [ obsfwd.E(), obsfwd.R(), obsfwd.eta(), obsfwd.delta(), obsfwd.surfacetwist() ] """ obsbkwd = ObservableData(["\\gamma_s"],scan_dir='scanbackward',scan=scan,loadsuf=loadsuf, savesuf=savesuf) ysbkwd = [obsbkwd.R(),obsbkwd.surfacetwist()] g_small,g_large,g_eq = find_metastable(obsfwd.R(),obsbkwd.R(), obsfwd.E(),obsbkwd.E())
obsfwd = ObservableData(["\\Lambda"], scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) obsbkwd = ObservableData(["\\Lambda"], scan_dir='scanbackward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) obsbkwd.sort_observables() observable_list = ['E', 'R', 'eta', 'delta', 'surfacetwist'] ysfwd = [ obsfwd.E(), obsfwd.R(), obsfwd.eta(), obsfwd.delta(), obsfwd.surfacetwist() ] ysbkwd = [ obsbkwd.E(), obsbkwd.R(), obsbkwd.eta(), obsbkwd.delta(), obsbkwd.surfacetwist() ] for i, observable in enumerate(observable_list):
scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) Lambdas = obsfwd.data[:, 0] if js == 1: obsbkwd = ObservableData(["\\Lambda"], scan_dir='scanbackward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) obsbkwd.sort_observables() ysbkwd = [obsbkwd.E(), obsbkwd.eta(), obsbkwd.delta()] ysfwd = [obsfwd.E(), obsfwd.eta(), obsfwd.delta()] for i, observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$\psi(R)$' elif observable == 'eta': ylabel = r'$2\pi/\eta$' ysfwd[i] = 2 * np.pi / ysfwd[i] if js == 1: ysbkwd[i] = 2 * np.pi / ysbkwd[i] elif observable == 'delta': ylabel = r'$\delta/\delta_0$' ysfwd[i] = ysfwd[i] / np.sqrt(2 / 3)
K33 = 30.0 scan = {} scan['\\gamma_s'] = str(gamma) scan['k_{24}'] = str(k24) scan['\\Lambda'] = str(Lambda) scan['\\omega'] = str(omega) scan['K_{33}'] = str(K33) observablestuff = ObservableData(scan=scan,loadsuf=loadsuf,savesuf=loadsuf, name=f"observables_frustrated") delta = observablestuff.delta() eta = observablestuff.eta() E0 = observablestuff.E() print(delta,eta,E0) psistuff = PsiData(scan=scan,loadsuf=loadsuf,savesuf=savesuf,name=f"psivsr_frustrated", sfile_format="pdf") rs = psistuff.r() psis = psistuff.psi() psiprimes = psistuff.psiprime() R0s = np.copy(rs[:len(rs)-10:5]) Es = np.copy(R0s)*0
strains = np.array([0.0, 0.01, 0.02, 0.03], float) colors = sns.color_palette("hls", len(strains)) fig = plt.figure() fig.set_size_inches(width, height) ax = fig.add_subplot(1, 1, 1) obsfwd = ObservableData(["strain"], scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) if obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ", Lambda) for i, u in enumerate(strains): if i == 0: strain = None else: strain = str(u) psi = PsiData(scan=scan, loadsuf=loadsuf, savesuf=savesuf,
K_22 = 6 # pN for i, observable in enumerate(observable_list): ax[observable] = fig.add_subplot(3, 1, i + 1) obsfwd = ObservableData(["strain", "averagetwist"], scan_dir='scanforward', scan=scan, loadsuf=loadsuf, savesuf=savesuf) Req = obsfwd.R()[0] / q * 1000 # nm strains = obsfwd.data[:, 0] stresses = np.gradient(obsfwd.E(), strains) * K_22 * q * q / 1e3 # in kPa stresses[0] = 0.0 ysfwd = [stresses, obsfwd.surfacetwist(), obsfwd.delta()] if obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ", Lambda) for i, observable in enumerate(observable_list): if observable == 'surfacetwist': ylabel = r'$\psi(R)$' + ' (' + r'$\si{\radian}$' + ')' elif observable == "stress": ylabel = r"$\sigma$" + ' (' + r'$\si{\kilo\pascal}$' + ')' elif observable == 'delta': ylabel = r'$\delta/\delta_0$' ysfwd[i] = ysfwd[i] / np.sqrt(2 / 3)
ax[observable] = fig[observable].add_subplot(1,1,1) for j,Lambda in enumerate(Lambdas): scan = {} scan['\\Lambda']=Lambda scan['k_{24}']=k24 scan['\\omega']=omega obsfwd = ObservableData(["\\gamma_s"],scan_dir='scanforward',scan=scan,loadsuf=loadsuf, savesuf=savesuf) gammas = obsfwd.data[:,0] ysfwd = [obsfwd.E(),obsfwd.R(),obsfwd.eta(), obsfwd.delta(),obsfwd.surfacetwist()] """ obsbkwd = ObservableData(["\\gamma_s"],scan_dir='scanbackward',scan=scan,loadsuf=loadsuf, savesuf=savesuf) ysbkwd = [obsbkwd.R(),obsbkwd.surfacetwist()] g_small,g_large,g_eq = find_metastable(obsfwd.R(),obsbkwd.R(), obsfwd.E(),obsbkwd.E()) print(g_small,g_large,g_eq) """
ax[observable] = fig.add_subplot(2,1,i+1) for kj,Lambda in enumerate(['1.0','10.0']): scan['\\Lambda']=Lambda for js,omega in enumerate(omegas): scan['\\omega']=omega print(omega) obsfwd = ObservableData(["strain"],scan_dir='scanforward',scan=scan,loadsuf=loadsuf, savesuf=savesuf) if not isinstance(obsfwd.E(),np.ndarray): ys_arrays["stress_max"][js]=0.0 ys_arrays["strain_max"][js]=0.0 continue if obsfwd.E()[0] > 1e299: print("bad calculation at Lambda = ",Lambda) continue strains = obsfwd.data[:,0] stresses = np.gradient(obsfwd.E(),strains) stresses[0] = 0.0 max_index = np.argmax(stresses)